Base64编码图像并稍后将其保存到文件中
Base64 Encode Image and Save it later to a file
我有一个管理员可以上传图片的应用程序。我将图像保存在一个文件中,并进行 base64 编码(使用 ruby 的 Base64.strict_encode 方法)并保存在我的数据库中。这样当后来有人从 HDD/Server 中删除物理文件时,我仍然可以通过 base64 解码(Base64.decode 方法)将它生成回来并保存在文件中。
但是编码解码不顺利,图片损坏,保存后无法查看
我检查了 Base64.strict_encode 的输出与我使用 http://www.base64-image.de/ 编码文件时的结果,它们是不同的。
谁能帮我解决这个问题?我究竟做错了什么?我没有做什么?
在上传过程中对图像进行编码:
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
编辑
当我将我的数据库中的编码图像数据替换为我从上述网站生成的图像数据时,我的图像被重新生成并且可以查看。所以真正的是编码。
曾经有过类似的问题,通过将 File.read 方法替换为 IO.binread(imageLoc) 来解决它。希望能帮助到你。 :)
我有一个管理员可以上传图片的应用程序。我将图像保存在一个文件中,并进行 base64 编码(使用 ruby 的 Base64.strict_encode 方法)并保存在我的数据库中。这样当后来有人从 HDD/Server 中删除物理文件时,我仍然可以通过 base64 解码(Base64.decode 方法)将它生成回来并保存在文件中。
但是编码解码不顺利,图片损坏,保存后无法查看
我检查了 Base64.strict_encode 的输出与我使用 http://www.base64-image.de/ 编码文件时的结果,它们是不同的。
谁能帮我解决这个问题?我究竟做错了什么?我没有做什么?
在上传过程中对图像进行编码:
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
编辑
当我将我的数据库中的编码图像数据替换为我从上述网站生成的图像数据时,我的图像被重新生成并且可以查看。所以真正的是编码。
曾经有过类似的问题,通过将 File.read 方法替换为 IO.binread(imageLoc) 来解决它。希望能帮助到你。 :)