如何实际跟踪S3上传进度(JavaScript SDK)

时间:2018-02-22 02:43:19

标签: javascript amazon-web-services amazon-s3

我希望能够跟踪S3文件上传的进度(以字节为单位上传的字节数)。

在任何人将此标记为欺骗之前 - 它不是。我在StackOverflow上看到的每个其他答案实际上都是错误的。如果您这样做:

s3
  .putObject(
    {
      Bucket: 'xyz',
      Key: 'wow.png',
      Body: data,
    },
    (err, data) => {
      console.log('done', err, data);
    }
  )
  .on('httpUploadProgress', progress => {
    console.log('Progress:', progress);
  });

您会获得一次进度更新,显示总大小:

Progress { loaded: 1082019, total: 1082019 }

这没用。我正在寻找的是一个更细粒度的上传进度报告,就像你在上传过程中通常看到的那样(无论文件大小是1MB还是100MB):

100%中的0% 100%中有3% 百分之七的百分之七 100%中有9% (等)

2 个答案:

答案 0 :(得分:1)

嗯,这就是答案(尽管很蹩脚)。只是分享这个,因为它可能是其他人的潜在问题。

不会在Node.js环境中工作!我一直在以这种方式测试它,它只调用httpUploadProgress回调一次。将代码移动到实际的前端客户端后,它会按预期工作,并在文件上传时打印进度。

答案 1 :(得分:0)

尝试一下:

s3
.putObject({
        Bucket: 'xyz',
        Key: 'wow.png',
        Body: data,
    },
    (err, data) => {
        console.log('done', err, data);
    }
)
.on('httpUploadProgress', ({ loaded, total }) => {
    console.log(ContentType, 'Progress:', loaded, '/', total, `${Math.round(100 * loaded / total)}%`);
})