从客户端下载AWS S3文件

Jas*_*ier 2 javascript amazon-s3 amazon-web-services node.js reactjs

我目前正在尝试使用前端的按钮从s3存储桶下载文件。这怎么可能呢?我对如何开始这件事一无所知。我已经尝试研究和研究,但是没有运气-我搜索的所有内容都是关于文件上传到s3存储桶,而不是下载文件。提前致谢。

注意:我将其应用于ReactJS(Frontend)NodeJS(Backend),并且,该文件是使用Webmerge上传的

更新:我试图与此生成链接(尝试节点,即使我不是后端开发者)(lol)

看下面的图片

到目前为止我尝试过的

onClick功能

Jor*_*els 11

这是我的解决方案:

let downloadImage = url => {
  let urlArray = url.split("/")
  let bucket = urlArray[3]
  let key = `${urlArray[4]}/${urlArray[5]}`
  let s3 = new AWS.S3({ params: { Bucket: bucket }})
  let params = {Bucket: bucket, Key: key}
  s3.getObject(params, (err, data) => {
    let blob=new Blob([data.Body], {type: data.ContentType});
    let link=document.createElement('a');
    link.href=window.URL.createObjectURL(blob);
    link.download=url;
    link.click();
  })
}
Run Code Online (Sandbox Code Playgroud)

参数中的 url 是指 S3 文件的 url。

只需将其放入onClick按钮的方法中即可。您还需要AWS SDK


Tii*_*ane 6

如果您要下载的文件不是公开的,则必须创建一个签名的URL才能获取该文件。

解决方案是这里的Javascript以从Amazon S3存储桶下载文件吗? 用于获取非公共文件,该过程围绕创建一个lambda函数,该函数将为您生成一个已签名的url,然后使用该url在单击按钮时下载文件

但是,如果要下载的文件是公开的,则不需要签名的URL,只需要知道文件的路径即可,这些URL的结构如下:https : //s3.amazonaws.com/ [文件路径] / [文件名]

它们还放大了AWS团队创建和维护的内容。

只需按照“入门 ”进行操作,即可从您的react应用程序下载文件,就像这样:

Storage.get('hello.png', {expires: 60})
.then(result => console.log(result))
.catch(err => console.log(err));
Run Code Online (Sandbox Code Playgroud)