0

これは私がやっていることです:

コントローラ内:-

    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 画像として保存することはできません。

4

1 に答える 1

2

画像表現は次のとおりです。

data:image/jpeg;base64,/9jblablablabla

正規表現を使用して値を取得し data:image/jpeg/9jblablablabla

image/jpegあなたのファイルタイプになります

/9jblablablablaイメージの表現になります。

間違ったソースをデコードすると、イメージ ファイルが破損する可能性があります。その後、FileTemp を使用してファイルを作成および保存できます。他の人も助けてくれることを願っています..

http://www.ruby-doc.org/stdlib-1.9.3/libdoc/tempfile/rdoc/Tempfile.html

于 2013-04-23T15:05:04.913 に答える