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 数据重新生成图像。但无法将其保存为带有载波的 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 回答