我有这样的代码段,曾经与之前版本的Google Chrome一起使用,但现在它不起作用。当我运行此脚本时,我重定向到包含文件内容(它是文本)和AWS URL(与setAttribute中相同)的页面。
var element = document.createElement('a');
element.setAttribute('href', 'https://s3-us-east-1.amazonaws.com/XXX/XXX/XXX?Signature=XXX&Expires=XXX&AWSAccessKeyId=XXX');
element.setAttribute('download', 'filename.txt');
document.body.appendChild(element);
element.click();
如何下载此文件?
答案 0 :(得分:1)
我在评论中犯了一个错误。 Chrome仍然支持下载属性,但如果锚元素具有跨源属性(意味着,如果文件托管在不同的域上),则它完全忽略它。
为了能够下载它,需要使用标题提供文件: Content-Disposition:attachment;
查看本教程,了解如何在s3管理控制台中设置Content-Disposition:http://iwantmyreal.name/s3-download-only-presigned-upload
答案 1 :(得分:0)
这是我的解决方案:
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参数引用图像的完整url。