2017-04-11 94 views
0

我有一個本地文件下載,它以下列方式觸發。Heroku文件上傳

panelBody.append('<button onclick="downloadCsv(\''+skl+'\')">Download csv</button>') 

function downloadCsv(data){ 
    var filename=data+'_report.csv' 
    var form = $('<form>', {action: '/admin/download', method: 'GET'}); 
    form.append($('<input>', {name: 'file_name', value: filename})); 
    form.submit(); 
    return false; 
} 

router.get('/download',helper.isSchoolAdmin,feedController.downloadCsv); 

downloadCsv:function(req,res){ 
    var fileName = process.cwd()+'/reports/'+ req.query.file_name; 
    res.download(fileName,function(err){ 
    if(!err)console.log('down') 
    }); 
} 

該文件本身被寫入到前一個請求中的指定路徑到不同的路由。 現在這工作正常我的本地..我的問題是,一旦我將它部署到heroku會發生什麼?我的文件上傳和下載仍然有效,因爲我已經讀過,heroku使用一個ephimeral文件系統,它只允許寫入一個tmp目錄。

如果是這樣的話,是否有人可以引導我完成如何通過節點寫入該目錄......還有,文件最終會在我下載之前被刪除,因爲上傳和下載都是部分單獨的請求?謝謝。

回答

1

Heroku的「臨時文件系統」是由於應用程序的集裝箱化。在構建應用程序時,會將LXC容器發送到運行庫並執行。

這意味着在文件系統上寫入的任何文件都不會在redeploys,應用程序重新啓動和多個dynos中持久化。即使在tmp文件夾中。

你不應該將這些文件存儲在磁盤上,但在一個專用的文件存儲平臺,如亞馬遜S3或谷歌雲存儲。

https://devcenter.heroku.com/articles/s3-upload-node

+0

是否確定上傳和讀取文件,(如CSV),然後讓系統中刪除?我並不擔心保存文件 - 只是將內容和POST發送到api。謝謝。 – joshlsullivan

+1

是的,沒關係。只要你不希望文件在請求持續時間後仍然在文件系統中。 –

+0

太棒了。感謝您的答覆。 – joshlsullivan