使用JavaScript承诺将一批文件上传到S3存储桶中,.then()
函数在putObject()
函数之后立即调用。成功上传所有文件时,如何配置它要调用?
下面您可以看到我尝试过的代码,其中大部分来自AWS教程。
var putBatch = function putBatch(bucket,folder, files) {
// Make all the putObject calls immediately
// Will return rejected promise if any requests fail
return Promise.all(files.map(function(file) {
var params = {
Bucket: bucket,
Key: folder +"/" + file.name,
Body: file,
Metadata: {
latlng: "saf",
timestamp: "fds",
alt: "df",
mission: "kjfahsdk"
}
};
return s3.putObject(params).promise();
}));
};
function addPhoto(albumName) {
var fileBatch = [];
var files = document.getElementById("inputGroupFile01").files;
if (!files.length) {
return alert("Please choose a file to upload first.");
}
for (var i = 0; i < files.length; i++) {
// console.log((files[i]));
var file = files[i];
var fileName = file.name;
// var albumPhotosKey = encodeURIComponent(albumName) + '//';
var photoKey = albumName + "/" + fileName;
fileBatch.push(file);
}
//putBatch(albumName, fileBatch);
putBatch(albumBucketName,albumName, fileBatch)
.then(console.log("done"))
.catch(console.error.bind(console));
}
一旦我称putBatch()
函数,我就会在控制台中接收"完成"。
您可以使用async等待文件上传到s3,例如:
var putBatch = function async putBatch(bucket,folder, files) {
// Make all the putObject calls immediately
// Will return rejected promise if any requests fail
let result = await Promise.all(files.map(async (file) => {
var params = {
Bucket: bucket,
Key: folder +"/" + file.name,
Body: file,
Metadata: {
latlng: "saf",
timestamp: "fds",
alt: "df",
mission: "kjfahsdk"
}
};
let s3Result = await s3.putObject(params).promise();
return s3Result;
}));
return result;
};
您可以尝试jquery.when((。您可以从这里阅读更多
$.when(putBatch(albumBucketName,albumName, fileBatch))
.then(console.log("done"))