簡體   English   中英

如何將文件從 AWS S3 下載到客戶端的設備?

[英]How do you download a file from AWS S3 to a client's device?

查看了有關如何將文件從 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')

 })

然后我如何將其發送給客戶端,以便將其下載到他們的設備上?

S3 支持通過 AWS Javascript API 生成預簽名 URL 的能力。 然后,用戶可以GET此 URL 以將 S3 對象下載到他們的本地設備。

有關Node.js代碼示例,請參閱此問題。

你可以像那樣使用 SignedURL

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

生成的鏈接將強制下載名為 filename.ext

如果你有文件 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();
    });

文件 URL 為: https : //BucketName.Region.amazonaws.com/Key只需替換為您的存儲桶名稱、區域和密鑰

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM