将文件从AWS-S3下载到本地计算机文件系统

时间:2019-04-03 22:11:24

标签: amazon-web-services amazon-s3 aws-lambda aws-sdk

我已经使用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)
    })
};

如何将文件下载到用户文件系统?

2 个答案:

答案 0 :(得分:0)

如果按用户的意思是要访问API网关的客户端,则不能。想象一下,我将创建一个Lambda函数,该函数将在您访问我的网站后开始将大量数据加载到您的计算机中。在这种情况下,使S3中的对象可下载,并让用户通过提供指向该对象的链接来决定是否要下载它。

如果用本地文件系统来表示lambda的本地文件系统,则可以访问正在执行lambda的容器内的/tmp文件夹,但其大小限制为500MB,并且一旦该容器消失已被破坏,所以这可能都不是您想要的。如果正在使用的某些模块在执行过程中需要访问文件系统,这将很有用。

答案 1 :(得分:0)

如果要允许用户下载文件,但想在lambda中进行某些操作之前先生成文件或生成S3对象的内容,则可以使用getSignedUrl

它将创建一个临时URL,您可以将其返回给客户,他们可以下载该URL。在这种情况下,不需要在S3上运行http服务器。此外,它还支持ssl并恢复下载。