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

2
assets

@ -1 +1 @@
Subproject commit 71e5fbd240824ad0b6e8ebe5e47d25704a82d7c4
Subproject commit 1c38544ef7fd51b4404797cf57355795c28683c1

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
}

View File

@ -244,8 +244,8 @@ type (
UploadURLs []string `json:"upload_urls,omitempty"`
Credential string `json:"credential,omitempty"`
UploadID string `json:"uploadID,omitempty"`
Callback string `json:"callback,omitempty"` // 回调地址
Uri string `json:"uri,omitempty"` // 存储路径
Callback string `json:"callback,omitempty"`
Uri string `json:"uri,omitempty"` // 存储路径
AccessKey string `json:"ak,omitempty"`
KeyTime string `json:"keyTime,omitempty"` // COS用有效期
CompleteURL string `json:"completeURL,omitempty"`