实际将文件从S3存储桶下载到本地计算机

时间:2020-03-08 23:58:54

标签: angular typescript amazon-web-services amazon-s3

我正在尝试使用以下功能从存储桶中获取s3文件:

async Export()
 {
   const myKey = '...key...'
   const mySecret = '...secret...'
  AWS.config.update(
    {
      accessKeyId: myKey,
      secretAccessKey: mySecret
    }
  );

  var s3 = new AWS.S3();

  s3.getObject({
    Bucket: '...bucket...',
    Key: '...filepath...'
  },
  function(error, data)
  {
    if (error != null)
    {
      alert("Failed to retrieve object: " + error)
    }
    else {
      alert("Loaded " + data.ContentLength + " bytes")
    }
  })
 }

,该消息告诉我我已经加载了一定数量的字节文件。但是,主要目标是将文件放入本地计算机,我是否需要在此处进行某种文件流处理?

注释

使用有角打字稿而不是有角js

1 个答案:

答案 0 :(得分:0)

是的,您正在将文件作为流获取。无需将文件另存为流,您可以获取s3签名的url,并可以通过创建定位链接并动态单击该链接来从该流中下载文件。下面的代码可以为您提供帮助。

const AWS = require('aws-sdk')
const s3 = new AWS.S3()
AWS.config.update({accessKeyId: 'your access key', secretAccessKey: 'you secret key'})

const myBucket = 'bucket-name'
const myKey = 'path/to/your/key/file.extension'
const signedUrlExpireSeconds = 60 * 5 // your expiry time in seconds.

const url = s3.getSignedUrl('getObject', {
  Bucket: myBucket,
  Key: myKey,
  Expires: signedUrlExpireSeconds
})

在前端使用此URL触发下载:

function download(url){
  $('<iframe>', { id:'idown', src:url }).hide().appendTo('body').click();
}
$("#downloadButton").click(function(){
  $.ajax({
    url: 'example.com/your_end_point',
    success: function(url){
      download(url);
    }
  })
});