我正在尝试检索以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)
在 Controller 中,我需要获取此图像的内容类型和文件名。所以首先我要解码它
image = ActiveSupport::Base64.decode64(params[:image])
image_data = StringIO.new(image)
然后我被卡住了!
我基本上想使用回形针保存此图像。需要一些认真的帮助!
更新 :
我无法为内容类型和文件名发送参数。我只是模仿正在发送此消息的客户端(并且我无法控制添加额外的参数)
最佳答案
您可以使用各种ImageMagick库之一解码原始字节,然后向ImageMagick请求格式。例如,使用RMagick:
require 'rmagick'
bytes = ActiveSupport::Base64.decode64(params[:image])
img = Magick::Image.from_blob(bytes).first
fmt = img.format
这将在
'PNG'
中提供'JPEG'
,fmt
等。 ImageMagick检查字节中的魔数(Magic Number)和其他标识信息,因此它不需要文件名即可知道要提供的图像类型。就文件名而言,除非有人明确告诉您它是什么,否则您很不走运。无论如何,文件名都无关紧要,您应该永远不要使用您未生成的文件名来保存任何内容。用户提供的文件名仅应用于向人们显示该名称,如果需要,请编入自己的文件名(您知道是安全的)。
关于ruby-on-rails - 从rails上的base64编码图像ruby检索文件名和内容类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6955950/