Skip to content

Commit a70ac93

Browse files
authored
Merge pull request #262 from tencentyun/feature_jojoliang_96949a4d
检查abort multi的路径
2 parents 713fe2f + bb60e1e commit a70ac93

File tree

3 files changed

+48
-17
lines changed

3 files changed

+48
-17
lines changed

bucket_part.go

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,13 @@ type ListMultipartUploadsResult struct {
3232

3333
// ListMultipartUploadsOptions is the option of ListMultipartUploads
3434
type ListMultipartUploadsOptions struct {
35-
Delimiter string `url:"delimiter,omitempty"`
36-
EncodingType string `url:"encoding-type,omitempty"`
37-
Prefix string `url:"prefix,omitempty"`
38-
MaxUploads int `url:"max-uploads,omitempty"`
39-
KeyMarker string `url:"key-marker,omitempty"`
40-
UploadIDMarker string `url:"upload-id-marker,omitempty"`
35+
Delimiter string `url:"delimiter,omitempty"`
36+
EncodingType string `url:"encoding-type,omitempty"`
37+
Prefix string `url:"prefix,omitempty"`
38+
MaxUploads int `url:"max-uploads,omitempty"`
39+
KeyMarker string `url:"key-marker,omitempty"`
40+
UploadIDMarker string `url:"upload-id-marker,omitempty"`
41+
XOptionHeader *http.Header `header:"-,omitempty" url:"-" xml:"-"`
4142
}
4243

4344
// ListMultipartUploads 用来查询正在进行中的分块上传。单次最多列出1000个正在进行中的分块上传。
@@ -46,11 +47,12 @@ type ListMultipartUploadsOptions struct {
4647
func (s *BucketService) ListMultipartUploads(ctx context.Context, opt *ListMultipartUploadsOptions) (*ListMultipartUploadsResult, *Response, error) {
4748
var res ListMultipartUploadsResult
4849
sendOpt := sendOptions{
49-
baseURL: s.client.BaseURL.BucketURL,
50-
uri: "/?uploads",
51-
method: http.MethodGet,
52-
result: &res,
53-
optQuery: opt,
50+
baseURL: s.client.BaseURL.BucketURL,
51+
uri: "/?uploads",
52+
method: http.MethodGet,
53+
result: &res,
54+
optQuery: opt,
55+
optHeader: opt,
5456
}
5557
resp, err := s.client.doRetry(ctx, &sendOpt)
5658
return &res, resp, err

object_part.go

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -286,21 +286,35 @@ func (s *ObjectService) CompleteMultipartUpload(ctx context.Context, name, uploa
286286
return &res, resp, err
287287
}
288288

289+
type AbortMultipartUploadOptions struct {
290+
XOptionHeader *http.Header `header:"-,omitempty" url:"-" xml:"-"`
291+
}
292+
289293
// AbortMultipartUpload 用来实现舍弃一个分块上传并删除已上传的块。当您调用Abort Multipart Upload时,
290294
// 如果有正在使用这个Upload Parts上传块的请求,则Upload Parts会返回失败。当该UploadID不存在时,会返回404 NoSuchUpload。
291295
//
292296
// 建议您及时完成分块上传或者舍弃分块上传,因为已上传但是未终止的块会占用存储空间进而产生存储费用。
293297
//
294298
// https://www.qcloud.com/document/product/436/7740
295-
func (s *ObjectService) AbortMultipartUpload(ctx context.Context, name, uploadID string) (*Response, error) {
299+
func (s *ObjectService) AbortMultipartUpload(ctx context.Context, name, uploadID string, opt ...*AbortMultipartUploadOptions) (*Response, error) {
296300
if len(name) == 0 || name == "/" {
297301
return nil, errors.New("empty object name")
298302
}
303+
// When use "" string might call the delete bucket interface
304+
if s.client.Conf.ObjectKeySimplifyCheck && !CheckObjectKeySimplify("/"+name) {
305+
return nil, ObjectKeySimplifyCheckErr
306+
}
307+
308+
var optHeader *AbortMultipartUploadOptions
309+
if len(opt) > 0 {
310+
optHeader = opt[0]
311+
}
299312
u := fmt.Sprintf("/%s?uploadId=%s", encodeURIComponent(name), uploadID)
300313
sendOpt := sendOptions{
301-
baseURL: s.client.BaseURL.BucketURL,
302-
uri: u,
303-
method: http.MethodDelete,
314+
baseURL: s.client.BaseURL.BucketURL,
315+
uri: u,
316+
method: http.MethodDelete,
317+
optHeader: optHeader,
304318
}
305319
resp, err := s.client.doRetry(ctx, &sendOpt)
306320
return resp, err

object_part_test.go

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,23 @@ func TestObjectService_AbortMultipartUpload(t *testing.T) {
3434
w.WriteHeader(http.StatusNoContent)
3535
})
3636

37-
_, err := client.Object.AbortMultipartUpload(context.Background(),
38-
name, uploadID)
37+
_, err := client.Object.AbortMultipartUpload(context.Background(), name, uploadID)
38+
if err != nil {
39+
t.Fatalf("Object.AbortMultipartUpload returned error: %v", err)
40+
}
41+
_, err = client.Object.AbortMultipartUpload(context.Background(), "/", uploadID)
42+
if err == nil || err.Error() != "empty object name" {
43+
t.Fatalf("Object.AbortMultipartUpload expect error: %v", err)
44+
}
45+
_, err = client.Object.AbortMultipartUpload(context.Background(), "//", uploadID)
46+
if err != ObjectKeySimplifyCheckErr {
47+
t.Fatalf("Object.AbortMultipartUpload expect error: %v", err)
48+
}
49+
opt := &AbortMultipartUploadOptions{
50+
XOptionHeader: &http.Header{},
51+
}
52+
opt.XOptionHeader.Add("x-cos-meta-test", "value")
53+
_, err = client.Object.AbortMultipartUpload(context.Background(), name, uploadID, opt)
3954
if err != nil {
4055
t.Fatalf("Object.AbortMultipartUpload returned error: %v", err)
4156
}

0 commit comments

Comments
 (0)