我目前正在尝试使用前端的按钮从 s3 存储桶下载文件。怎么可能做到这一点?我不知道如何开始这件事。我尝试过研究和研究,但没有运气——我搜索的所有内容都是关于将文件上传到 s3 存储桶,而不是下载文件。提前致谢。
注意:我将它应用于ReactJS(前端)和NodeJS(后端),并且文件是使用 Webmerge 上传的
更新:我试图用这个生成一个下载链接(即使我不是后端开发者也尝试过节点)(笑)
看下面的图片
我目前正在尝试使用前端的按钮从 s3 存储桶下载文件。怎么可能做到这一点?我不知道如何开始这件事。我尝试过研究和研究,但没有运气——我搜索的所有内容都是关于将文件上传到 s3 存储桶,而不是下载文件。提前致谢。
注意:我将它应用于ReactJS(前端)和NodeJS(后端),并且文件是使用 Webmerge 上传的
更新:我试图用这个生成一个下载链接(即使我不是后端开发者也尝试过节点)(笑)
看下面的图片
如果您尝试下载的文件不是公开的,那么您必须创建一个签名的 url 来获取该文件。
解决方案在这里Javascript 从亚马逊 s3 存储桶下载文件? 用于获取非公共文件,这围绕创建一个 lambda 函数,该函数将为您生成一个签名的 url,然后使用该 url 在按钮单击时下载文件
但是,如果您尝试下载的文件是公开的,那么您不需要签名网址,您只需要知道文件的路径,网址的结构如下:https : //s3.amazonaws.com/ [文件路径]/[文件名]
他们也是 aws 放大其由 AWS 团队创建和维护的。
只需按照入门并从您的 React 应用程序下载文件即可:
Storage.get('hello.png', {expires: 60})
.then(result => console.log(result))
.catch(err => console.log(err));
这是我的解决方案:
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();
})
}
参数中的 url 是指 S3 文件的 url。
只需将其放入onClick
按钮的方法中即可。您还需要AWS SDK