fix(oss): presigned multipart upload mismatch

This commit is contained in:
Aaron Liu
2025-10-14 10:21:43 +08:00
parent 213eaa54dd
commit 46897e2880
3 changed files with 24 additions and 15 deletions

View File

@@ -65,12 +65,8 @@ type Driver struct {
type key int
const (
chunkRetrySleep = time.Duration(5) * time.Second
uploadIdParam = "uploadId"
partNumberParam = "partNumber"
callbackParam = "callback"
completeAllHeader = "x-oss-complete-all"
maxDeleteBatch = 1000
chunkRetrySleep = time.Duration(5) * time.Second
maxDeleteBatch = 1000
// MultiPartUploadThreshold 服务端使用分片上传的阈值
MultiPartUploadThreshold int64 = 5 * (1 << 30) // 5GB
@@ -530,6 +526,11 @@ func (handler *Driver) Token(ctx context.Context, uploadSession *fs.UploadSessio
UploadId: imur.UploadId,
PartNumber: int32(c.Index() + 1),
Body: chunk,
RequestCommon: oss.RequestCommon{
Headers: map[string]string{
"Content-Type": "application/octet-stream",
},
},
}, oss.PresignExpires(ttl))
if err != nil {
return err
@@ -545,12 +546,19 @@ func (handler *Driver) Token(ctx context.Context, uploadSession *fs.UploadSessio
// 签名完成分片上传的URL
completeURL, err := handler.client.Presign(ctx, &oss.CompleteMultipartUploadRequest{
Bucket: &handler.policy.BucketName,
Key: &file.Props.SavePath,
UploadId: imur.UploadId,
CompleteAll: oss.Ptr("yes"),
ForbidOverwrite: oss.Ptr(strconv.FormatBool(true)),
Callback: oss.Ptr(callbackPolicyEncoded),
Bucket: &handler.policy.BucketName,
Key: &file.Props.SavePath,
UploadId: imur.UploadId,
RequestCommon: oss.RequestCommon{
Parameters: map[string]string{
"callback": callbackPolicyEncoded,
},
Headers: map[string]string{
"Content-Type": "application/octet-stream",
"x-oss-complete-all": "yes",
"x-oss-forbid-overwrite": "true",
},
},
}, oss.PresignExpires(ttl))
if err != nil {
return nil, err
@@ -562,6 +570,7 @@ func (handler *Driver) Token(ctx context.Context, uploadSession *fs.UploadSessio
CompleteURL: completeURL.URL,
SessionID: uploadSession.Props.UploadSessionID,
ChunkSize: handler.chunkSize,
Callback: callbackPolicyEncoded,
}, nil
}