AWS S3 SDK:中止正在进行的 putObject 上传

Posted

技术标签:

【中文标题】AWS S3 SDK:中止正在进行的 putObject 上传【英文标题】:AWS S3 SDK: Abort a putObject upload in progress 【发布时间】:2017-09-12 16:27:08 【问题描述】:

我目前正在使用 putObject 将文件上传到 S3 存储桶

params = 
    Key: videoKey,
    ContentType: file.type,
    Body: file,
    ACL: "public-read"
;

req = s3.putObject(params).on('httpUploadProgress', function(evt) 
    // calculate percentage complete
    var percentComplete = Math.round(evt.loaded / evt.total * 100);

    $cancelBtn.on("click", function(evt) 
      req.abort.bind(req); // doesn't work; returns an error
    );
).send(function(err, data) 
    // code to handle what happens after upload completes
);

我在多个位置阅读过使用req.abort()req.abort.bind(req),但这似乎返回以下错误:

'req.abort is not a function. (In 're.abort()', 'req.abort' is undefined)'

确实'req' 在其对象中似乎没有abort() 函数,所以我想知道这是否只是与旧版本的 AWS 开发工具包相关联。如果是这样,处理这个问题的正确方法是什么?我已经阅读了 Amazon 网站上的一些文档,了解一种名为 abortMultipartUpload 的方法,但此方法需要 UploadId,我不知道如何从我的 putObject 函数中检索它.如何在'send' 回调之前检索带有UploadID 的响应?

感谢您的帮助!

-迈克尔

【问题讨论】:

【参考方案1】:

S3 PUTObject API 不是多部分请求。当您使用createMultipartUpload 发起多部分请求时,abortMultipartUploadcompleteMultipartUpload 是必需的或可以使用。 createMultipartUpload API 的响应返回 uploadId 值。

createMultipartUpload(params = , callback) ⇒ AWS.Request 发起一个 分段上传并返回一个上传ID。注意:启动后 分段上传和上传一个或多个部分,您必须 完成或中止分段上传以停止收费 用于存储上传的部分。

分段上传步骤:-

1) 分段上传启动 - API createMultipartUpload

2) 部分上传 - API 为 uploaduploadPart

3) 分段上传完成(或中止) - API abortMultipartUploadcompleteMultipartUpload

【讨论】:

以上是关于AWS S3 SDK:中止正在进行的 putObject 上传的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 aws-sdk 获取 AWS S3 上文件的 URL?

AWS SDK JavaScript:如何显示 AWS.S3.putObject 的上传进度?

如何使用AWS SDK从S3下载对象--RESTful。

如何使用AWS SDK从S3下载对象--RESTful。

如何使用 aws-sdk 将文件同步上传到 S3?

为啥我在 s3 上的访问被拒绝(使用适用于 Node.js 的 aws-sdk)?