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

时间:2017-09-12 16:27:08

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

我目前正在使用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 SDK相关联。如果是这样,处理这个问题的正确方法是什么?我已经在亚马逊的网站上阅读了一些名为 abortMultipartUpload 的方法的文档,但这种方法需要 UploadId ,我无法想象如何从我的{{1}中检索这个功能。如何在putObject回调之前检索UploadID的回复?

感谢您的帮助!

- 迈克尔

1 个答案:

答案 0 :(得分:0)

S3 PUTObject API不是多部分请求。使用abortMultipartUpload启动多部分请求时,completeMultipartUploadcreateMultipartUpload是必需的,或者可以使用createMultipartUploaduploadIdcreateMultipartUpload API的响应返回upload值。

  

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

多部分上传步骤:

1)多部分上传启动 - API uploadPart

2)部件上传 - API为abortMultipartUploadcompleteMultipartUpload

3)多部分上传完成(或中止) - API sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) 或{{1}}