2015-12-11 93 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文件