【发布时间】:2021-10-04 02:28:17
【问题描述】:
多部分上传到 S3 分为 3 个步骤:
- 启动分段上传
- 上传零件
- 完成分段上传
使用AWS SDK for JavaScript v3(正好是v3.22),前两步成功:
-
UploadId来自初始化。 - 每个部分上传都附带完成所需的
ETag上传。
问题来自请求上传完成,通过以下方式完成:
const completeParams: CompleteMultipartUploadCommandInput = {
Bucket,
Key,
UploadId,
MultipartUpload: { Parts },
};
return client.send(new CompleteMultipartUploadCommand(completeParams));
其中Parts 是按PartNumber 排序的有效CompletedPart 对象数组。
分析网络调用,请求完成
https://{Bucket}.s3.{Location}.scw.cloud/{Key}?uploadId={UploadId}&x-id=CompleteMultipartUpload
注意:用占位符替换敏感数据,但它们是预期值。
而AWS SDK生成的主体是:
<?xml version="1.0" encoding="UTF-8"?>
<CompletedMultipartUpload xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Part>
<ETag>"610c4..."</ETag>
<PartNumber>1</PartNumber>
</Part>
<Part>
<ETag>"2edb4..."</ETag>
<PartNumber>2</PartNumber>
</Part>
</CompletedMultipartUpload>
注意:仅显示每个 ETag 的前 5 个字符,以表明它们不同并且来自上传部分。
但是 S3 的答案是:
The XML you provided was not well-formed or did not validate against our published schema.
阅读extensive documentation,有一个细微的差别:XML 的根元素应该是CompleteMultipartUpload 而不是CompletedMultipartUpload,但XML 是由AWS SDK 生成的,我希望它是正确的。
可能出了什么问题?
【问题讨论】:
标签: javascript amazon-web-services amazon-s3 aws-sdk aws-sdk-js