2015-12-11 147 views
0

我想为我的数组中的每个值在每个循环中下载一个文件。Ruby on Rails - 在每个循环中使用send_file下载多个文件

我已经在我的课两种方法:

def test 
    testarray = ['value1', 'value2', 'value3'] 

    testarray.each do |value| 
    download_file(value) 
    end 

end 

def download_file(value) 

    send_file("public/downloads/test/" + value +".pdf", :filename => value + ".pdf", :type => "application/pdf", :diposition => "inline") 

end 

但是,当我把我的测试方法,只有我的数组的最后一个元素被下载。控制台打印如下:

Sent file public/downloads/shapefiles/test1.pdf (0.1ms) 
Sent file public/downloads/shapefiles/test2.pdf (0.1ms) 
Sent file public/downloads/shapefiles/test3.pdf (0.1ms) 
Completed 200 OK in 2ms (ActiveRecord: 0.0ms) 

但我的浏览器只下载最后一个文件,在这种情况下,`test3.pdf。

有人可能知道为什么会发生这种情况吗?

回答

2

send_file实际上指示服务器发送文件,不发送它自己。例如,如果使用正确配置的nginx - rails只会发出X-Accel-Redirect头文件,所有其他文件处理都将由nginx完成。其他设置的行为通常相同(但没有反向代理文件上传仍然会阻止一些ruby进程/线程)

这就是为什么只有最后一个文件正在发送。

所以要下载多个文件,他们应该被打包成一个。您可以使用nginx_mod_zip使用类似于X-accel-redirect的技术即时创建zip文件