如何使用S3使用AWS SDK来解决JavaScript Promise



使用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"))

最新更新