如何从Rails 4中的Controller下载公共目录?

时间:2015-06-30 14:02:50

标签: ruby-on-rails ruby-on-rails-4 heroku download

我有一个Rails 4应用程序,我用它来跟踪产品,在这种情况下产品是指徽章,使用唯一生成的QR码来识别徽章是否合法而不是伪造。我能够将所需的所有QR码正确生成到公共文件夹中的目录(public/codes_out,这些是在数据库的初始种子上创建的),但我似乎无法下载目录

我似乎无法解决两个问题:

  1. 我的理解是,我需要以某种方式压缩public/codes_out目录,以便将其实际导出到真实用户。我听说过gzip(至少我认为它被称之为)可以很好地完成这项工作,但它与Heroku存在问题。如果是这种情况,那么我可以用另一台压缩器来压缩这个文件夹吗?
  2. 如何让用户真正下载压缩文件夹?我尝试了send_file '/public/codes_out', :x_sendfile=>true,但遗憾的是我不能这样发送,因为它没有被压缩。
  3. 如果它有所帮助,这些QR码都只是简单的PNG,我尝试过使用Dragonfly并查看了Paperclip,但是不确定是否真的对于立即下载整个目录是有用的

1 个答案:

答案 0 :(得分:1)

我找到了这个算法:

Dir["*"].each do |file|
  if File.directory?(file)
    `zip -r "#{file}.zip" "#{file}"`
  end
end

这允许我压缩整个目录,允许我定位单个文件并使用此命令在我的控制器中下载:

send_file(Rails.root.join('public', 'codes_out.zip'), :type=>"application/zip" , :x_sendfile=>true)