我已经使用api-gateway,aws-lambda和s3存储桶编写了微服务。 我目前能够读取lambda函数中的所有文件内容。 但是我想将文件从s3下载到本地文件系统。 我尝试使用pipe(localfilepath),但它会抛出有关路径的错误(未找到)。
const AWS = require('aws-sdk');
var s3 = new AWS.S3();
exports.handler = function(event, context, callback) {
var params = {
"Bucket": "bucketname",
"Key": "hello"
};
var readstream = s3.getObject(params).createReadStream();
readstream.on('data',(data) => {
console.log(data)
})
.on('end', () => {
return callback(null, "file read done")
})
.on('error',(e) => {
console.log("Error occured",e)
})
};
如何将文件下载到用户文件系统?
答案 0 :(得分:0)
如果按用户的意思是要访问API网关的客户端,则不能。想象一下,我将创建一个Lambda函数,该函数将在您访问我的网站后开始将大量数据加载到您的计算机中。在这种情况下,使S3中的对象可下载,并让用户通过提供指向该对象的链接来决定是否要下载它。
如果用本地文件系统来表示lambda的本地文件系统,则可以访问正在执行lambda的容器内的/tmp
文件夹,但其大小限制为500MB,并且一旦该容器消失已被破坏,所以这可能都不是您想要的。如果正在使用的某些模块在执行过程中需要访问文件系统,这将很有用。
答案 1 :(得分:0)
如果要允许用户下载文件,但想在lambda中进行某些操作之前先生成文件或生成S3对象的内容,则可以使用getSignedUrl。
它将创建一个临时URL,您可以将其返回给客户,他们可以下载该URL。在这种情况下,不需要在S3上运行http服务器。此外,它还支持ssl并恢复下载。