[英]res.download file from Amazon S3
我试图从我的根目录之外下载一个文件,但是每次我尝试时,它都会尝试从根目录中获取它。 我需要我网站的用户才能下载这些文件。
该文件最初已上传到 Amazon S3,我已使用 getObject 函数访问它。
这是我的代码:
app.get('/test_script_api', function(req, res){
var fileName = req.query.File;
s3.getObject(
{ Bucket: "bucket-name", Key: fileName },
function(error, s3data){
if(error != null){
console.log("Failed to retrieve an object: " + error);
}else{
//I have tried passing the S3 data but it asks for a string
res.download(s3data.Body);
//So I have tried just passing the file name & an absolute path
res.download(fileName);
}
}
);
});
这将返回以下错误:错误:ENOENT:没有这样的文件或目录,stat '/home/ec2-user/environment/test2.txt'
当我输入绝对路径时,它只是将其附加到 /home/ec2-user/environment/ 的末尾
如何更改 res.download 试图从中下载的目录?
有没有更简单的方法可以从 Amazon S3 下载文件?
任何帮助将不胜感激!
我遇到了同样的问题,我找到了这个答案: NodeJS 如何从 aws s3 存储桶下载文件到磁盘?
基于此,您需要使用 createReadStream() 和 pipe()。 R 这里更多关于 stream.pipe() - https://nodejs.org/en/knowledge/advanced/streams/how-to-use-stream-pipe/
res.attachment() 将为您设置标题。 -> https://expressjs.com/en/api.html#res.attachment 。
此代码应该适合您(基于上述链接中的答案):
app.get('/test_script_api', function (req, res) {
var fileName = req.query.File;
res.attachment(fileName);
var file = s3.getObject({
Bucket: "bucket-name",
Key: fileName
}).createReadStream()
.on("error", error => {
});
file.pipe(res);
});
就我而言,在客户端,我使用了<a href="URL to my route" download="file name"></a>
这确保文件正在下载。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.