【发布时间】:2015-08-06 02:16:02
【问题描述】:
我的应用程序根据对象的属性(品牌、型号等)创建自定义标签,并将它们成功保存到服务器。我正在尝试将其直接发送到浏览器的send_data 图像(使用to_blob),以便用户可以立即打开并打印图像,而不是先将其保存到服务器。我在发送到浏览器部分时遇到了很多麻烦。
我正在使用 Rails (4.0.0) 和 rmagick (2.13.4)。如果我可以分享任何其他信息,请告诉我。代码如下:
VIEW
<%= link_to fa_icon('qrcode', text: 'Print'),
labels_path(@warranty_item.qr_code, { format: :png }),
method: :post, remote: true, class: 'btn btn-xs btn-warning' %>
CONTROLLER
require 'rmagick'
def create
respond_to do |format|
format.png do
@img = Magick::Image.new(280, 100) { self.background_color = blue' }
@img.format = 'png'
@img_blob = @img.to_blob
send_data @img_blob, filename: 'test_label.png', disposition: 'inline', type: 'image/png'
end
end
end
在 Rails 的日志中,这很顺利;没有错误,没有警告,只有一个:Sent data test_label.png (0.7ms)
如果我在 Rails 控制台中运行@img.to_blob,它会给我这个:
"\x89PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x01 \x00\x00\x00$\x01\x03\x00\x00\x00\x13\xABua\x00\x00\x00\x04gAMA\x00\x00\xB1\x8F\v\xFCa\x05\x00\x00\x00 cHRM\x00\x00z&\x00\x00\x80\x84\x00\x00\xFA\x00\x00\x00\x80\xE8\x00\x00u0\x00\x00\xEA`\x00\x00:\x98\x00\x00\x17p\x9C\xBAQ<\x00\x00\x00\x06PLTE\x00\x00\xFF\xFF\xFF\xFF{\xDC\x99,\x00\x00\x00\x01bKGD\x00\x88\x05\x1DH\x00\x00\x00\x14IDAT8\xCBc`\x18\x05\xA3`\x14\x8C\x82Q@,\x00\x00\x054\x00\x01\xEA\xAF\x9B \x00\x00\x00\x00IEND\xAEB`\x82"
但是,如果我使用记录器,Rails.logger.info @img.to_blob 它会给我这个:
�PNG
IHDR $�uagAMA��
�a cHRMz&�����u0�`:�p��Q<PLTE����{ܙ,bKGD�HIDAT8�c`�`��Q@,4ꯛ IEND�B`�
就像我上面提到的,如果我只是保存图像@img.write('test_label.png'),它就可以完美运行。我究竟做错了什么?我错过了什么?代码执行,在控制台中测试它可以工作,但它不会将图像数据发送到用户的浏览器/下载文件,以便他们可以打开它。请帮忙!
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-4 imagemagick rmagick