带有回调 httpUploadProgress 的 AWS 开发工具包 JavaScript Promise

Pra*_*mar 2 javascript amazon-s3 aws-sdk aws-sdk-js

我正在尝试使用 AWS S3 SDK JavaScript 获取 httpUploadProgress。使用这一行,我可以看到上传进度的预期结果,但是如何使用 Promise() 获得相同的结果,我在浏览器中使用它作为外部 JS 资源。

工作示例:

    function uploadFile(){
        var bucket = new AWS.S3({params: {Bucket: BUCKET_NAME}});
        var fileChooser = document.getElementById('file');
        var file = fileChooser.files[0];
        if (file) {
            console.log();
            var opts = {queueSize: 1, partSize: 1024 * 1024 * 5};
            var params = {Key: file.name, ContentType: file.type, Body: file};
            s3.upload(params,opts).on('httpUploadProgress', function(evt) {
            console.log("Uploaded :: " + parseInt((evt.loaded * 100) / evt.total)+'%');
            }).send(function(err, data) {
                console.log(err);
                alert("File uploaded successfully.");
            });
        }
        return false;
    }
Run Code Online (Sandbox Code Playgroud)

我想要的承诺也是如此。

function uploadFile(){
        var bucket = new AWS.S3({params: {Bucket: BUCKET_NAME}});
        var fileChooser = document.getElementById('file');
        var file = fileChooser.files[0];
        if (file) {
            console.log();
            var opts = {queueSize: 1, partSize: 1024 * 1024 * 5};
            var params = {Key: file.name, ContentType: file.type, Body: file};
            var promise = s3.upload(params,opts).promise();
            promise()
               .then(function(data){}, function(error){})
        }
        return false;
    }
Run Code Online (Sandbox Code Playgroud)

Ric*_*tie 5

我有同样的问题。我不确定你的实现情况,但我认为这就是你可能正在寻找的......

function async uploadFile(){
  var bucket = new AWS.S3({params: {Bucket: BUCKET_NAME}});
  var fileChooser = document.getElementById('file');
  var file = fileChooser.files[0];

  if (file) {
    console.log();
    var opts = {queueSize: 1, partSize: 1024 * 1024 * 5};
    var params = {Key: file.name, ContentType: file.type, Body: file};

    var upload = s3.upload(params,opts)
        .on('httpUploadProgress', function(evt) {
          console.log("Uploaded :: " + parseInt((evt.loaded * 100) / evt.total)+'%');
        })
        .promise();

    await upload.then(function(err, data) {
      console.log(err);
      alert("File uploaded successfully.");
    });
  }

  return false;
}
Run Code Online (Sandbox Code Playgroud)