如何生成多个图像并将它们放入一个zip文件以便使用Rails3下载?

时间:2011-05-24 04:22:00

标签: ruby image ruby-on-rails-3 download zip

我在我的网站上生成了Google图表API中的二维码,其中包含一些传递的参考号。

我有大约100个这样的代码是从URL生成的,如下所示:

$= image_tag("http://chart.apis.google.com/chart?cht=qr&chl=#{qr.code}&chs=120x120&choe=UTF-8", :size => "120x120")

我想创建一个循环遍历我的数组并生成png文件的方法,然后将它们放在一个zip文件中,我可以一键下载。

我尝试使用send_data "url", :disposition = > "attachment", :type => "image/png"

这只保存了URL,而不是生成的图像。将URL放入浏览器会打开一个带有图像的窗口。

除此之外,我无法将所有文件添加到zip文件中。 Rails有自己的内置压缩方法吗?

2 个答案:

答案 0 :(得分:5)

首先,对于每个QR码,使用Net::HTTP将来自Google API的QR码图像下载到临时文件中。然后使用rubyzip将临时文件压缩为zip文件。如何使用zip库的示例是here。最后,使用send_data(或send_file,如果您已将其写入磁盘)将此生成的zip文件发送到客户端的Web浏览器。

答案 1 :(得分:1)

查看我的mod_zip模块中的Nginx:

https://github.com/evanmiller/mod_zip

您可以将ZIP文件动态流式传输到客户端,而无需任何临时文件。