【问题标题】:Download a file from AWS-S3 to local computer file system从 AWS-S3 下载文件到本地计算机文件系统
【发布时间】:2019-04-03 22:11:23
【问题描述】:

我使用 api-gateway、aws-lambda 和 s3 bucket 编写了微服务。 我目前能够读取 lambda 函数中的所有文件内容。 但我想将文件从 s3 下载到本地文件系统。 我尝试使用管道(本地文件路径),但它会引发有关路径的错误(未找到)。

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)
    })
};

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      如果本地文件系统是指 lambda 的本地文件系统,那么您可以访问容器内的 /tmp 文件夹,其中正在执行 lambda,但其大小限制为 500MB,一旦容器被销毁,它就会消失所以这可能也不是你想要的。这在您使用的某些模块在执行期间需要访问文件系统的情况下很有用。

      【讨论】:

        猜你喜欢
        • 2019-07-03
        • 2016-04-10
        • 2016-02-02
        • 1970-01-01
        • 2017-08-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-23
        相关资源
        最近更新 更多