从Rails / Ruby中的encoded64代码恢复jpeg文件

时间:2015-11-17 17:28:17

标签: ruby ruby-on-rails-4 imagemagick base64

我们的问题是,使用uploaded_io中的Base64编码的jpeg图像文件,如何从中恢复jpeg文件?

编码uploaded_iocanvas.toDataURL("image/jpeg")生成。这是uploaded_io看起来像:

uploaded_io = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2....."

在ruby / rails 4中,base64编码的文件可以用以下方式解码:

require 'base64'
decoded = Base64.decode64(uploaded_io.sub(/.+,/, ''))  #removed file header 'data:image/jpeg;base64,' as suggested

我们添加了gem mini_magickv3.5.0)并在我们的计算机上安装了image magick库。做了以下事情:

image = MiniMagick::Image.new(decoded)  

image不是jpeg图片文件,对.type.size反应不佳。无需操纵图像文件,我们不确定此处是否真的需要天气mini_magick / image magick

1 个答案:

答案 0 :(得分:1)

一个突出的问题是你解码图像然后删除会导致问题的标题。

image = MiniMagick::Image(decoded.sub(/.+,/, ''))

我使用Ruby Base64进行了一个简单的测试编码/解码图像,一切都按预期工作。

irb示例:

require 'base64'

e = Base64.encode64(IO.read('/path/to/jpeg'))
d = Base64.decode64(e)

File.open("test.jpg", "w") { |f| f.write(d) }

test.jpg应该是有效的文件。通过执行file test.jpg确认。