Skip to content

Commit 38ae995

Browse files
authored
Merge pull request #91 from volcengine/release_v2.9.0
v2.9.0
2 parents d08687f + 3a4be27 commit 38ae995

31 files changed

Lines changed: 1380 additions & 139 deletions

CHANGELOG.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,13 @@
11
# ChangeLog of TOS SDK for Go
2+
## 版本号 v2.9.0 日期:2025-12-10
3+
- 默认开启 DNS 缓存
4+
- PreSignedURLInput 支持签名输入 header
5+
- 新增 SetObjectTime 接口
6+
- 新增 GetBucketInfo 接口
7+
- UploadFile 接口支持上传回调
8+
- 新增快速判断桶 DoesBucketExist 是否存在接口
9+
- 新增快速判断对象 DoesObjectExist 是否存在的接口
10+
211
## 版本号 v2.8.0 日期:2025-12-03
312
- 新增 GetFetchTaskV2 接口
413
- 新增 CredentialsProvider 鉴权方式

tos/access_monitor.go

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package tos
2+
3+
import (
4+
"bytes"
5+
"context"
6+
"github.com/volcengine/ve-tos-golang-sdk/v2/tos/enum"
7+
"net/http"
8+
)
9+
10+
type putBucketAccessMonitor struct {
11+
Status enum.StatusType `json:"Status"`
12+
}
13+
14+
func (cli *ClientV2) PutBucketAccessMonitor(ctx context.Context, input *PutBucketAccessMonitorInput) (*PutBucketAccessMonitorOutput, error) {
15+
if input == nil {
16+
return nil, InputIsNilClientError
17+
}
18+
if err := isValidBucketName(input.Bucket, cli.isCustomDomain); err != nil {
19+
return nil, err
20+
}
21+
22+
data, contentMD5, err := marshalInput("PutBucketAccessMonitor", putBucketAccessMonitor{
23+
Status: input.Status,
24+
})
25+
if err != nil {
26+
return nil, err
27+
}
28+
29+
res, err := cli.newBuilder(input.Bucket, "").
30+
SetGeneric(input.GenericInput).
31+
WithQuery("accessmonitor", "").
32+
WithHeader(HeaderContentMD5, contentMD5).
33+
WithRetry(OnRetryFromStart, StatusCodeClassifier{}).
34+
Request(ctx, http.MethodPut, bytes.NewReader(data), cli.roundTripper(http.StatusOK))
35+
36+
if err != nil {
37+
return nil, err
38+
}
39+
defer res.Close()
40+
output := PutBucketAccessMonitorOutput{RequestInfo: res.RequestInfo()}
41+
return &output, nil
42+
}
43+
44+
func (cli *ClientV2) GetBucketAccessMonitor(ctx context.Context, input *GetBucketAccessMonitorInput) (*GetBucketAccessMonitorOutput, error) {
45+
if input == nil {
46+
return nil, InputIsNilClientError
47+
}
48+
if err := isValidBucketName(input.Bucket, cli.isCustomDomain); err != nil {
49+
return nil, err
50+
}
51+
res, err := cli.newBuilder(input.Bucket, "").
52+
SetGeneric(input.GenericInput).
53+
WithQuery("accessmonitor", "").
54+
WithRetry(nil, StatusCodeClassifier{}).
55+
Request(ctx, http.MethodGet, nil, cli.roundTripper(http.StatusOK))
56+
if err != nil {
57+
return nil, err
58+
}
59+
defer res.Close()
60+
output := GetBucketAccessMonitorOutput{RequestInfo: res.RequestInfo()}
61+
if err = marshalOutput(res, &output); err != nil {
62+
return nil, err
63+
}
64+
return &output, nil
65+
}

tos/bucket.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -293,3 +293,30 @@ func (cli *ClientV2) GetBucketInfo(ctx context.Context, input *GetBucketInfoInpu
293293
}
294294
return &output, nil
295295
}
296+
297+
func (cli *ClientV2) DoesBucketExist(ctx context.Context, input *DoesBucketExistInput) (bool, error) {
298+
if input == nil {
299+
return false, InputIsNilClientError
300+
}
301+
if err := isValidBucketName(input.Bucket, cli.isCustomDomain); err != nil {
302+
return false, err
303+
}
304+
res, err := cli.HeadBucket(ctx, &HeadBucketInput{
305+
Bucket: input.Bucket,
306+
})
307+
308+
if err != nil {
309+
if serr, ok := err.(*TosServerError); ok {
310+
if serr.EC == "0006-00000001" {
311+
return false, nil
312+
}
313+
}
314+
return false, err
315+
}
316+
317+
if res.StatusCode == http.StatusOK {
318+
return true, nil
319+
}
320+
321+
return false, err
322+
}

tos/check.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ func isValidMetadataDirective(directiveType enum.MetadataDirectiveType) error {
113113
func isValidPermission(permissionType enum.PermissionType) error {
114114
if permissionType == enum.PermissionRead || permissionType == enum.PermissionReadAcp ||
115115
permissionType == enum.PermissionWriteAcp || permissionType == enum.PermissionWrite ||
116-
permissionType == enum.PermissionFullControl {
116+
permissionType == enum.PermissionFullControl || permissionType == enum.PermissionReadNonList {
117117
return nil
118118
}
119119
return InvalidPermission

0 commit comments

Comments
 (0)