Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从客户端下载AWS S3文件_Javascript_Node.js_Reactjs_Amazon Web Services_Amazon S3 - Fatal编程技术网

Javascript 从客户端下载AWS S3文件

Javascript 从客户端下载AWS S3文件,javascript,node.js,reactjs,amazon-web-services,amazon-s3,Javascript,Node.js,Reactjs,Amazon Web Services,Amazon S3,我目前正在尝试使用前端的按钮从s3 bucket下载文件。这怎么可能呢?我不知道怎么开始这件事。我尝试过研究,但没有成功——我搜索的都是将文件上传到s3存储桶,而不是下载文件。提前谢谢 注意:我将其应用于ReactJS(前端)和NodeJS(后端),并且该文件是使用Webmerge上传的 更新:我正在尝试生成一个与此的下载链接(即使我不是后端开发人员,也尝试了此节点)(lol) 参见下面的图片 如果您试图下载的文件不是公共文件,则必须创建一个签名url才能获取该文件 这里的解决方案是获取非公共

我目前正在尝试使用前端的按钮从s3 bucket下载文件。这怎么可能呢?我不知道怎么开始这件事。我尝试过研究,但没有成功——我搜索的都是将文件上传到s3存储桶,而不是下载文件。提前谢谢

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

更新:我正在尝试生成一个与此的下载链接(即使我不是后端开发人员,也尝试了此节点)(lol)

参见下面的图片


如果您试图下载的文件不是公共文件,则必须创建一个签名url才能获取该文件

这里的解决方案是获取非公共文件,它围绕着创建一个lambda函数,该函数将为您生成一个签名url,然后在单击按钮时使用该url下载文件

但是,如果您试图下载的文件是公开的,那么您不需要签名的url,您只需要知道文件的路径,url的结构如下:[file path]/[filename]

它们也是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

您尝试了什么?简单搜索给了我这个页面,我认为它通常只是一个HTTP GET(即标准的web下载),如果它是一个非公共的bucket,则附加了正确的凭据。@Rup,哦,我明白了,找不到正确的凭据tho@RohitDhiman我已经更新了我的问题,并用代码图像支持它。谢谢:)太好了!谢谢:)请告诉我进展如何,如果我的回答对您有帮助,我将非常感谢您的支持,如果我得到了正确的答案:)这不像登录到控制台那么容易,因为登录到控制台并不会让文件下载到我的用户。我找不到任何关于如何实际将链接下载到页面或下载到用户的示例。这是一个承诺,所以我必须等待它,不能只是把它添加到一个链接标签…你能添加这个html部分吗solution@Banani720下载图像(url))>单击我