这就是我正在做的事情:
在控制器中: -
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数据重新生成图像。但无法将其保存为带载波的jpeg图像。
答案 0 :(得分:2)
图像表示为:
data:image/jpeg;base64,/9jblablablabla
使用 regexp 获取值
data:image/jpeg
和/9jblablablabla
image/jpeg
将是您的文件类型
/9jblablablabla
将是图片的表示。
解码错误的源可能会导致图像文件损坏。 然后,您可以使用FileTemp来创建和保存文件。希望它也帮助别人..
http://www.ruby-doc.org/stdlib-1.9.3/libdoc/tempfile/rdoc/Tempfile.html