[英]base64 Image uploaded with stringIO carrierwave gem gets corrupt on upload in rails
這就是我正在做的事情:
在控制器中: -
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圖像。
圖像表示為:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.