使用aws-sdk-go-v2进行S3分片上传遇InvalidPart错误求助
问题根源与修复方案
核心问题
你代码中存在分片编号不匹配的致命错误:
- 第一个
UploadPart请求指定的PartNumber是2,但在构建CompletedPart(p1)时却将PartNumber设为1。 - AWS S3通过
UploadId+PartNumber唯一标识分片,由于你从未上传过编号为1的分片,执行CompleteMultipartUpload时自然找不到对应分片,触发报错。
修复代码
修改第一个UploadPart的PartNumber为1,确保上传的分片编号与提交的CompletedPart编号完全一致:
// 第一个分片上传,PartNumber从2改为1 part, err := s3Client.UploadPart(ctx, &s3.UploadPartInput{ Bucket: bucket, Key: key, UploadId: out.UploadId, PartNumber: 1, ChecksumAlgorithm: typ, Body: strings.NewReader(helloWorld), })
额外验证点
- 所有上传的分片编号需连续且唯一,范围限制为1~10000
- 提交
CompletedMultipartUpload时,每个CompletedPart的ETag必须与上传该分片时返回的ETag完全一致 - 若启用校验和,需保证
CompletedPart中的校验和字段与上传时返回的对应字段完全匹配(你当前代码中这部分逻辑是正确的)
内容的提问来源于stack exchange,提问作者Kokizzu
相关产品推荐
相关产品推荐

