我正在尋找一種方法來創建多個csv文件,並將它們作爲一個zip壓縮文件下載到我的Rails應用程序中的一個請求中。使用rails創建多個csv文件並將所有zip壓縮文件全部下載
要構建存檔我使用rubyzip gem - 下載它只是內置函數send_data。我遇到的問題是rubyzip的添加函數需要一個路徑名來加載文件。但是沒有路徑,因爲我的csv文件是在同一個請求中創建的。
一些代碼:
# controller action to download zip
def download_zip
zip = @company.download_all
send_data zip, filename: "abc.zip", type: 'application/zip'
end
# method to create zip
def download_all
Zip::File.open('def.zip', Zip::File::CREATE) do |zipfile|
self.users.each do |user|
#some magic to combine zipfile.add() and user.to_csv
end
end
end
# method to create csv
def to_csv
CSV.generate do |csv|
#build awesome csv
end
end
有沒有辦法來temporarely救我的CSV文件,在某些目錄,我可以通過一個路徑名zipfile.add()?
週末愉快的人和愉快的編碼!
這似乎是我正在尋找的方法!但仍然缺少一些東西:打開myarchive.zip會創建一個名爲myarchive.zip.cpgz的新文件。創建存檔還是有問題,或者可能是我的mac中有另一個問題? – cashflo 2014-09-13 16:27:04
你有沒有試過指定MIME類型? 'send_data zip,文件名:「abc.zip」,類型:'application/zip'' - 許多瀏覽器/操作系統只會在文件存在的情況下正確處理文件。 – 2014-09-13 17:09:14
是的,我指定了MIME類型。我偶然用編輯器打開了abc.zip。事實證明它包含數組中的所有用戶條目,而不是我想要爲每個用戶構建的實際csv文件。 to_csv爲用戶確實工作,因爲我用它在別的地方爲特定用戶提供csv下載。 puts塊中有什麼缺失?也許另一種類型規格? – cashflo 2014-09-13 17:58:20