我正在尝试使用以下功能从存储桶中获取s3文件:
async Export()
{
const myKey = '...key...'
const mySecret = '...secret...'
AWS.config.update(
{
accessKeyId: myKey,
secretAccessKey: mySecret
}
);
var s3 = new AWS.S3();
s3.getObject({
Bucket: '...bucket...',
Key: '...filepath...'
},
function(error, data)
{
if (error != null)
{
alert("Failed to retrieve object: " + error)
}
else {
alert("Loaded " + data.ContentLength + " bytes")
}
})
}
,该消息告诉我我已经加载了一定数量的字节文件。但是,主要目标是将文件放入本地计算机,我是否需要在此处进行某种文件流处理?
使用有角打字稿而不是有角js
答案 0 :(得分:0)
是的,您正在将文件作为流获取。无需将文件另存为流,您可以获取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
})
在前端使用此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);
}
})
});