【问题标题】:How do you download a file from AWS S3 to a client's device?如何将文件从 AWS S3 下载到客户端设备?
【发布时间】:2018-07-05 12:12:27
【问题描述】:

查看了有关如何将文件从 S3 下载到本地磁盘的所有教程。我遵循了所有解决方案,他们所做的是将文件下载到服务器而不是客户端。我目前拥有的代码是

app.get('/download_file', function(req, res) {
  var file = fs.createWriteStream('/Users/arthurlecalvez/Downloads/file.csv');
  file.on('close', function(){console.log('done'); });
  s3.getObject({ Bucket: 'data.pool.al14835', Key: req.query.filename }).on('error', function (err) {
   console.log(err);
   }).on('httpData', function (chunk) {
      file.write(chunk);
   }).on('httpDone', function () {
       file.end();
   }).send();

  res.send('success')

 })

然后我如何将其发送给客户端,以便将其下载到他们的设备上?

【问题讨论】:

    标签: javascript node.js amazon-web-services amazon-s3


    【解决方案1】:

    S3 支持通过 AWS Javascript API 生成预签名 URL。然后,用户可以GET此 URL 将 S3 对象下载到他们的本地设备。

    See this question for a Node.js code sample.

    【讨论】:

      【解决方案2】:

      你可以像这样使用 SignedURL

      var params = {Bucket: bucketname , Key: keyfile , Expires: 3600 , ResponseContentDisposition :  `attachment; filename="filename.ext"` };
      var url = s3.getSignedUrl('getObject', params);
      
      

      生成的链接将强制下载名为 filename.ext 的链接

      【讨论】:

      • 这对我来说比任何更复杂的答案都更有效。
      • 这是最好的答案,你应该在所有其他地方回答它
      【解决方案3】:

      如果你有文件 URL,你可以这样做,

      new Observable((observer) => {
            var xhr = new XMLHttpRequest();
            xhr.open("get", fileURL, true);
            xhr.responseType = "blob";
            xhr.onload = function () {
              if (xhr.readyState === 4) {
                observer.next(xhr.response);
                observer.complete();
              }
            };
            xhr.send();
          }).subscribe((blob: any) => {
            let link = document.createElement("a");
            link.href = window.URL.createObjectURL(blob);
            link.download = elem.material.driverUrl;
            link.click();
          });
      

      文件网址是: https://BucketName.Region.amazonaws.com/Key 只需替换为您的存储桶名称、区域和密钥

      【讨论】:

        【解决方案4】:

        可以使用 res.download 方法http://expressjs.com/en/api.html#res.download ?

        【讨论】:

          猜你喜欢
          • 2019-03-04
          • 2016-02-02
          • 1970-01-01
          • 1970-01-01
          • 2017-02-15
          • 1970-01-01
          • 2021-10-13
          • 1970-01-01
          相关资源
          最近更新 更多