これは私がやっていることです:
コントローラ内:-
dataurl = params[:dataURL]
io = FilelessIO.new(Base64.decode64(dataurl))
io.original_filename = "foobar.jpeg"
io.content_type = "image/jpeg"
p = SketchilyTest.new
p.image = io
p.save
モデル:-
class FilelessIO < StringIO
attr_accessor :original_filename
attr_accessor :content_type
end
class SketchilyTest < ActiveRecord::Base
attr_accessible :desc, :image
mount_uploader :image, BaseSixtyfourEncodedUploader
end
BaseSixtyfourEncodedUploader は、carrierwave gem のシンプルなアップローダです。
問題は、エラーが発生せず、画像がアップロードされても破損していることです。
ブラウザで開こうとすると、次のエラーが表示されます。
The image “http://localhost:3000/uploads/sketchily_test/image/41/foobar.jpeg” cannot be displayed because it contains errors.
また、データベースの base64_encoded データから画像を再生成できることにも注意してください。ただし、carrierwave で jpeg 画像として保存することはできません。