我有一个本地文件下载,它以下列方式触发。
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使用的是一个只允许写入tmp目录的ephimeral文件系统。
如果是这种情况,有人可以告诉我如何通过节点写到该目录的确切...而且,在下载之前文件最终会被删除,因为上传和下载是其中的一部分单独请求?感谢。
答案 0 :(得分:1)
Heroku&#34;短暂的文件系统&#34;是由于应用程序的容器化。构建应用程序时,会将LXC容器发送到运行时并执行。
这意味着在重新部署,app重启和多个dynos之后,文件系统上写入的任何文件都不会被保留。即使在tmp文件夹中。
您不应该将这些文件存储在磁盘上,而是存储在专用的文件存储平台上,例如Amazon S3或Google Cloud Storage。