Base64编码图像并稍后将其保存到文件中

时间:2015-07-03 14:46:59

标签: ruby-on-rails ruby ruby-on-rails-3 image-processing base64

我有一个管理员可以上传图片的应用程序。我将图像保存在文件中,也使用base64编码(使用ruby的Base64.strict_encode方法)&保存在我的数据库中。这样,当以后有人从HDD / Server中删除了物理文件时,我仍然可以通过base64对其进行解码(Base64.decode方法)并保存在文件中。

但编码和解码效果不佳,因为图像损坏,保存后我无法查看。

当我使用http://www.base64-image.de/对文件进行编码时,我检查了Base64.strict_encode的输出结果,它们是不同的。

任何人都可以帮我吗?我究竟做错了什么?我不做什么?

在上传过程中编码图像:

  imageLoc = image.image.to_s
  logger.info '>>>>>>' + (Base64.strict_encode64(open(imageLoc).read)).to_s
  image_data = Base64.strict_encode64(File.open(imageLoc, 'rb').read)
  CategoryImage.update_image_data(image.id,image_data)

当图像文件丢失时解码:

File.open(File.join(APP_CONFIG['image_storage_location'], image[:image]), 'wb') { |f|
    content = image[:image_data]
    content.gsub!('\\r', "\r")
    content.gsub!('\\n', "\n")
    f.write(Base64.decode64(content))
    f.close
  }

来自网站的编码图片(base64-image.de):https://shrib.com/cYLKfEe1?v=nc

来自我的代码的编码图像:https://shrib.com/CODE-encoded%20image?v=nc

修改

当我用我从上面提到的网站生成的图像数据替换我的数据库中的编码图像数据时,我的图像被重新生成并可查看。所以真正的是编码。

1 个答案:

答案 0 :(得分:2)

曾经有类似的问题,通过用IO.binread(imageLoc)替换File.read方法解决了这个问题。希望能帮助到你。 :)