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

Submodule assets updated: 71e5fbd240...1c38544ef7

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"`