Loading a Base64-encoded file in PaperClip using Rails

I have a base64 encoded string of an image file. I need to save it using Paper Clip

My controller code

@driver = User.find(6) encoded_file = Base64.encode64(File.open('/pjt_path/public/test.jpg').read) decoded_file = Base64.decode64(encoded_file) @driver.profile_pic = StringIO.open(decoded_file) @driver.save 

In my user model

  has_attached_file :profile_pic, :styles => { :medium => "300x300>", :thumb => "100x100>" }, :default_url => '/icon.jpg' 

Currently, the file is saved as a text file (stringio.txt). But when I change the extension to JPG, I can view it as an image. How to correctly display an image using StringIO.

I have rails 3.2, ruby ​​1.9.2, paperclip 3.0.3

+8
ruby ruby-on-rails file-upload stringio paperclip
source share
2 answers

I fixed the problem using

 encoded_file = Base64.encode64(File.open('/pjt_path/public/test.jpg').read) decoded_file = Base64.decode64(params[:encoded_image]) begin file = Tempfile.new(['test', '.jpg']) file.binmode file.write decoded_file file.close @user.profile_pic = file if @user.save render :json => {:message => "Successfully uploaded the profile picture."} else render :json => {:message => "Failed to upload image"} end ensure file.unlink end 
+11
source share

Try setting the parameter :path / :url has_attached_file and explicitly override the extension:

http://rdoc.info/gems/paperclip/Paperclip/ClassMethods#has_attached_file-instance_method

respectively

http://rdoc.info/gems/paperclip/Paperclip/Storage/Filesystem

+2
source share

All Articles