.NET Framework 4.8生成S3分片上传预签名URL后无法识别分片问题
问题根源
你错误地通过Parameters.Add手动添加uploadId和partNumber参数,AWS SDK for .NET v3的GetPreSignedUrlRequest类本身提供了专门的UploadId和PartNumber属性来处理分片上传的预签名URL生成。手动添加参数会导致签名逻辑未正确包含这些参数,或者S3无法识别这是分片上传请求,最终把每次PUT操作当成覆盖整个对象的普通上传。
修复代码
直接给GetPreSignedUrlRequest的对应属性赋值,替换手动添加参数的逻辑:
var presignedRequest = new GetPreSignedUrlRequest { BucketName = bucketName, Key = objectKey, Verb = HttpVerb.PUT, Expires = DateTime.UtcNow.AddHours(1), UploadId = uploadId, PartNumber = partNumber }; string presignedUrl = s3Client.GetPreSignedURL(presignedRequest);
注意事项
- 确认已通过
InitiateMultipartUploadAsync获取到有效的UploadId,且每个分片的PartNumber在1~10000的合法范围内(S3分片上传的限制)。 - 所有分片上传完成后,必须调用
CompleteMultipartUploadAsync接口合并分片,否则S3不会将这些分片组合成完整对象,分片数据也不会被永久保留。
内容的提问来源于stack exchange,提问作者Abhishek
相关产品推荐
相关产品推荐

