我试图从Amazon S3上的存储桶下载文件。我想知道我是否可以编写一个javascript来从桶中下载这样的文件。我正在谷歌搜索它,但找不到任何可以帮助我做到这一点的资源。
一些步骤是:验证Amazon S3,然后通过提供存储桶名称和文件(密钥),下载或读取文件,以便我能够在文件中显示数据。
谢谢,
答案 0 :(得分:27)
也许您可以使用AWS Node.js API:
var AWS = require('aws-sdk');
AWS.config.update(
{
accessKeyId: ".. your key ..",
secretAccessKey: ".. your secret key ..",
}
);
var s3 = new AWS.S3();
s3.getObject(
{ Bucket: "my-bucket", Key: "my-picture.jpg" },
function (error, data) {
if (error != null) {
alert("Failed to retrieve an object: " + error);
} else {
alert("Loaded " + data.ContentLength + " bytes");
// do something with data.Body
}
}
);
答案 1 :(得分:12)
我来到这里寻找客户端下载s3文件。以下是我解决它的方法:
因为,我无法在客户端存储我的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
})
// return the url to client
在前端使用此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);
}
})
});
答案 2 :(得分:1)
这里的其他答案有效,但想扩展对我有用的答案。
就我而言,我正在处理太大的文件
function download(url){
$('<iframe>', { id:'idown', src:url }).hide().appendTo('body').click();
}
上班。 (正在获取url is too long
)
我的解决方案是包括一个隐藏的锚标记,并在ajax成功时触发对该标记的单击。
除非您不关心处理错误,否则不能马上使用anchor标签。
如果出现问题,S3将以XML错误文件响应,因此浏览器将自动显示该XML响应。通过首先尝试使用ajax来访问URL,您可以捕获该错误而无需显示难看的XML。知道成功清除该文件后,便可以尝试下载该文件。