我正在我的网站上从谷歌的图表 API 生成二维码作为 URL,并传递一些参数。
我有大约 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 有自己的内置压缩方法吗?
首先,对于每个二维码,使用 Net::HTTP 将二维码的图像从谷歌的 API 下载到临时文件中。然后使用 rubyzip 将临时文件压缩为 zip 文件。 有关如何使用 zip 库的示例位于此处。最后,使用 send_data
(如果已将其写入磁盘,则send_file
)将此生成的 zip 文件发送到客户端的 Web 浏览器。
查看我的 Nginx mod_zip模块:
https://github.com/evanmiller/mod_zip
您可以将 ZIP 文件动态流式传输到客户端,而无需任何临时文件。