Search code examples
ruby-on-railsrubyfile-uploadpaperclipstringio

File upload Base64 encoded string in PaperClip using Rails


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

My Controller code is

 @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 image. How can I name the image correctly using StringIO.

I am having rails 3.2, ruby 1.9.2, paperclip 3.0.3


Solution

  • I fixed the issue by 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