我正在尝试检索以 Base64 编码格式接收的图像的内容类型和文件名。
这是使用 Base64 编码图像执行 POST 请求的代码
require 'net/http'
require "rubygems"
require 'active_support'
url = URI.parse('http://localhost:3000/')
image = ActiveSupport::Base64.encode64(open("public/images/rails.png").to_a.join)
post_params = {'image' => image }
Net::HTTP.post_form(url, post_params)
在控制器中,我需要获取该图像的内容类型和文件名。所以首先我要解码它
image = ActiveSupport::Base64.decode64(params[:image])
image_data = StringIO.new(image)
然后我就卡住了!
我基本上想用回形针保存这张图像。需要一些认真的帮助!
UPDATE :我无法发送内容类型和文件名的参数。我只是模仿发送此消息的客户端(并且我无法控制添加额外参数)
您可以使用各种 ImageMagick 库之一解码原始字节,然后向 ImageMagick 询问格式。例如,与RMagick http://studio.imagemagick.org/RMagick/doc/:
require 'rmagick'
bytes = ActiveSupport::Base64.decode64(params[:image])
img = Magick::Image.from_blob(bytes).first
fmt = img.format
那会给你'PNG'
, 'JPEG'
等在fmt
。 ImageMagick 检查字节中的幻数和其他标识信息,因此不需要文件名即可知道您提供的图像类型。
就文件名而言,除非有人明确告诉您它是什么,否则您就不走运了。无论如何,文件名很少重要,你应该never使用您未生成的文件名来保存任何内容;用户提供的文件名只能用于向人们显示名称,如果需要,请编写您自己的文件名(您知道是安全的)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)