簡體   English   中英

base64使用stringIO上傳的圖片carrierwave gem在rails上傳時會損壞

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM