API | 操作名 | 操作描述 |
简单上传对象 | 上传一个 Object(文件/对象)至 Bucket | |
追加上传对象 | 使用分块追加的方式上传对象 |
API | 操作名 | 操作描述 |
查询分块上传 | 查询正在进行中的分块上传信息 | |
初始化分块上传 | 初始化 Multipart Upload 上传操作 | |
上传分块 | 分块上传文件 | |
查询已上传块 | 查询特定分块上传操作中的已上传的块 | |
完成分块上传 | 完成整个文件的分块上传 | |
终止分块上传 | 终止一个分块上传操作并删除已上传的块 |
func (s *ObjectService) Upload(ctx context.Context, key string, filepath string, opt *MultiUploadOptions) (*CompleteMultipartUploadResult, *Response, error)
package mainimport ("context""github.com/tencentyun/cos-go-sdk-v5""net/http""net/url""os")func main() {// 存储桶名称,由 bucketname-appid 组成,appid 必须填入,可以在 COS 控制台查看存储桶名称。 https://console.tencentcloud.com/cos5/bucket// 替换为用户的 region,存储桶 region 可以在 COS 控制台“存储桶概览”查看 https://console.tencentcloud.com/ ,关于地域的详情见 https://www.tencentcloud.com/document/product/436/6224?from_cn_redirect=1 。u, _ := url.Parse("https://examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com")b := &cos.BaseURL{BucketURL: u}client := cos.NewClient(b, &http.Client{Transport: &cos.AuthorizationTransport{// 通过环境变量获取密钥// 环境变量 SECRETID 表示用户的 SecretId,登录访问管理控制台查看密钥,https://console.tencentcloud.com/cam/capiSecretID: os.Getenv("SECRETID"), // 用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1// 环境变量 SECRETKEY 表示用户的 SecretKey,登录访问管理控制台查看密钥,https://console.tencentcloud.com/cam/capiSecretKey: os.Getenv("SECRETKEY"), // 用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1},})key := "exampleobject"_, _, err := client.Object.Upload(context.Background(), key, "localfile", nil,)if err != nil {panic(err)}}
type MultiUploadOptions struct {OptIni *InitiateMultipartUploadOptionsPartSize int64ThreadPoolSize intCheckPoint bool}
参数名称 | 参数描述 | 类型 | 是否必填 |
key | 对象键(Key)是对象在存储桶中的唯一标识。例如,在对象的访问域名 examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/doc/pic.jpg 中,对象键为 doc/pic.jpg | string | 是 |
filepath | 本地文件名 | string | 是 |
opt | 对象属性 | Struct | 否 |
OptIni | 设置对象属性和 ACL,详情请参见 InitiateMultipartUploadOptions | Struct | 否 |
PartSize | 块大小,单位为 MB,如果用户不指定或者指定 partSize <= 0,由 Go SDK 自动切分,新版本默认大小为16MB | int | 否 |
ThreadPoolSize | 线程池大小,默认为1 | int | 否 |
CheckPoint | 是否开启断点续传,默认为 false | bool | 否 |
type CompleteMultipartUploadResult struct {Location stringBucket stringKey stringETag string}
参数名称 | 参数描述 | 类型 |
Location | URL 地址 | string |
Bucket | 存储桶名称,格式:BucketName-APPID。例如 examplebucket-1250000000 | string |
Key | 对象键(Key)是对象在存储桶中的唯一标识。例如,在对象的访问域名 examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/doc/pic.jpg 中,对象键为 doc/pic.jpg | string |
ETag | 合并后对象的唯一标签值,该值不是对象内容的 MD5 校验值,仅能用于检查对象唯一性。如需校验文件内容,可以在上传过程中校验单个分块的 ETag 值 | string |
func (s *ObjectService) Put(ctx context.Context, key string, r io.Reader, opt *ObjectPutOptions) (*Response, error)func (s *ObjectService) PutFromFile(ctx context.Context, name string, filePath string, opt *ObjectPutOptions) (*Response, error)
package mainimport ("context""github.com/tencentyun/cos-go-sdk-v5""net/http""net/url""os""strings")func main() {// 存储桶名称,由 bucketname-appid 组成,appid 必须填入,可以在 COS 控制台查看存储桶名称。 https://console.tencentcloud.com/cos5/bucket// 替换为用户的 region,存储桶 region 可以在 COS 控制台“存储桶概览”查看 https://console.tencentcloud.com/ ,关于地域的详情见 https://www.tencentcloud.com/document/product/436/6224?from_cn_redirect=1 。u, _ := url.Parse("https://examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com")b := &cos.BaseURL{BucketURL: u}client := cos.NewClient(b, &http.Client{Transport: &cos.AuthorizationTransport{// 通过环境变量获取密钥// 环境变量 SECRETID 表示用户的 SecretId,登录访问管理控制台查看密钥,https://console.tencentcloud.com/cam/capiSecretID: os.Getenv("SECRETID"), // 用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1// 环境变量 SECRETKEY 表示用户的 SecretKey,登录访问管理控制台查看密钥,https://console.tencentcloud.com/cam/capiSecretKey: os.Getenv("SECRETKEY"), // 用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1},})// Case1 使用 Put 上传对象key := "exampleobject"f, err := os.Open("../test")opt := &cos.ObjectPutOptions{ObjectPutHeaderOptions: &cos.ObjectPutHeaderOptions{ContentType: "text/html",},ACLHeaderOptions: &cos.ACLHeaderOptions{// 如果不是必要操作,建议上传文件时不要给单个文件设置权限,避免达到限制。若不设置默认继承桶的权限。XCosACL: "private",},}_, err = client.Object.Put(context.Background(), key, f, opt)if err != nil {panic(err)}// Case 2 使用 PUtFromFile 上传本地文件到 COSfilepath := "./test"_, err = client.Object.PutFromFile(context.Background(), key, filepath, opt)if err != nil {panic(err)}// Case 3 上传 0 字节文件, 设置输入流长度为 0_, err = client.Object.Put(context.Background(), key, strings.NewReader(""), nil)if err != nil {// ERROR}}
package mainimport ("context""github.com/tencentyun/cos-go-sdk-v5""net/http""net/url""os""strings")func main() {// 存储桶名称,由 bucketname-appid 组成,appid 必须填入,可以在 COS 控制台查看存储桶名称。 https://console.tencentcloud.com/cos5/bucket// 替换为用户的 region,存储桶 region 可以在 COS 控制台“存储桶概览”查看 https://console.tencentcloud.com/ ,关于地域的详情见 https://www.tencentcloud.com/document/product/436/6224?from_cn_redirect=1 。u, _ := url.Parse("https://examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com")b := &cos.BaseURL{BucketURL: u}client := cos.NewClient(b, &http.Client{Transport: &cos.AuthorizationTransport{// 通过环境变量获取密钥// 环境变量 SECRETID 表示用户的 SecretId,登录访问管理控制台查看密钥,https://console.tencentcloud.com/cam/capiSecretID: os.Getenv("SECRETID"), // 用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1// 环境变量 SECRETKEY 表示用户的 SecretKey,登录访问管理控制台查看密钥,https://console.tencentcloud.com/cam/capiSecretKey: os.Getenv("SECRETKEY"), // 用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1},})// 文件夹名称name := "folder/"// 传递大小为0的输入流_, err := client.Object.Put(context.Background(), name, strings.NewReader(""), nil)if err != nil {// ERROR}}
package mainimport ("context""github.com/tencentyun/cos-go-sdk-v5""net/http""net/url""os""strings")func main() {// 存储桶名称,由 bucketname-appid 组成,appid 必须填入,可以在 COS 控制台查看存储桶名称。 https://console.tencentcloud.com/cos5/bucket// 替换为用户的 region,存储桶 region 可以在 COS 控制台“存储桶概览”查看 https://console.tencentcloud.com/ ,关于地域的详情见 https://www.tencentcloud.com/document/product/436/6224?from_cn_redirect=1 。u, _ := url.Parse("https://examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com")b := &cos.BaseURL{BucketURL: u}client := cos.NewClient(b, &http.Client{Transport: &cos.AuthorizationTransport{// 通过环境变量获取密钥// 环境变量 SECRETID 表示用户的 SecretId,登录访问管理控制台查看密钥,https://console.tencentcloud.com/cam/capiSecretID: os.Getenv("SECRETID"), // 用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1// 环境变量 SECRETKEY 表示用户的 SecretKey,登录访问管理控制台查看密钥,https://console.tencentcloud.com/cam/capiSecretKey: os.Getenv("SECRETKEY"), // 用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1},})dir := "exampledir/"filename := "exampleobject"key := dir + filenamef := strings.NewReader("test file")_, err = client.Object.Put(context.Background(), key, f, nil)if err != nil {// ERROR}}
package mainimport ("context""fmt""github.com/tencentyun/cos-go-sdk-v5""net/http""net/url""os")type SelfListener struct {}// 自定义进度回调,需要实现 ProgressChangedCallback 方法func (l *SelfListener) ProgressChangedCallback(event *cos.ProgressEvent) {switch event.EventType {case cos.ProgressDataEvent:fmt.Printf("\\r[ConsumedBytes/TotalBytes: %d/%d, %d%%]",event.ConsumedBytes, event.TotalBytes, event.ConsumedBytes*100/event.TotalBytes)case cos.ProgressFailedEvent:fmt.Printf("\\nTransfer Failed: %v", event.Err)}}func main() {// 存储桶名称,由 bucketname-appid 组成,appid 必须填入,可以在 COS 控制台查看存储桶名称。 https://console.tencentcloud.com/cos5/bucket// 替换为用户的 region,存储桶 region 可以在 COS 控制台“存储桶概览”查看 https://console.tencentcloud.com/ ,关于地域的详情见 https://www.tencentcloud.com/document/product/436/6224?from_cn_redirect=1 。u, _ := url.Parse("https://examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com")b := &cos.BaseURL{BucketURL: u}client := cos.NewClient(b, &http.Client{Transport: &cos.AuthorizationTransport{// 通过环境变量获取密钥// 环境变量 SECRETID 表示用户的 SecretId,登录访问管理控制台查看密钥,https://console.tencentcloud.com/cam/capiSecretID: os.Getenv("SECRETID"), // 用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1// 环境变量 SECRETKEY 表示用户的 SecretKey,登录访问管理控制台查看密钥,https://console.tencentcloud.com/cam/capiSecretKey: os.Getenv("SECRETKEY"), // 用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1},})// Case 1 通过默认回调查看上传进度key := "exampleobject"f, err := os.Open("test")opt := &cos.ObjectPutOptions{ObjectPutHeaderOptions: &cos.ObjectPutHeaderOptions{ContentType: "text/html",// 设置默认的进度回调函数Listener: &cos.DefaultProgressListener{},},ACLHeaderOptions: &cos.ACLHeaderOptions{// 如果不是必要操作,建议上传文件时不要给单个文件设置权限,避免达到限制。若不设置默认继承桶的权限。XCosACL: "private",},}_, err = client.Object.Put(context.Background(), key, f, opt)if err != nil {panic(err)}// Case 2 通过自定义方式查看上传进度opt.Listener = &SelfListener{}filepath := "./test"_, err = client.Object.PutFromFile(context.Background(), key, filepath, opt)if err != nil {panic(err)}}
package mainimport ("context""github.com/tencentyun/cos-go-sdk-v5""net/http""net/url""os""sync")func upload(wg *sync.WaitGroup, c *cos.Client, files <-chan string) {defer wg.Done()for file := range files {name := "folder/" + filefd, err := os.Open(file)if err != nil {//ERRORcontinue}_, err = c.Object.Put(context.Background(), name, fd, nil)if err != nil {//ERROR}}}func main() {u, _ := url.Parse("https://examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com")b := &cos.BaseURL{BucketURL: u}c := cos.NewClient(b, &http.Client{Transport: &cos.AuthorizationTransport{SecretID: os.Getenv("SECRETID"), // 用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1SecretKey: os.Getenv("SECRETKEY"), // 用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1},})// 多线程批量上传文件filesCh := make(chan string, 2)filePaths := []string{"test1", "test2", "test3"}var wg sync.WaitGroupthreadpool := 2for i := 0; i < threadpool; i++ {wg.Add(1)go upload(&wg, c, filesCh)}for _, filePath := range filePaths {filesCh <- filePath}close(filesCh)wg.Wait()}
package mainimport ("context""crypto/md5""encoding/base64""fmt""github.com/tencentyun/cos-go-sdk-v5""io/ioutil""net/http""net/url""os""strings")func calMD5Digest(msg []byte) []byte {m := md5.New()m.Write(msg)return m.Sum(nil)}func main() {u, _ := url.Parse("https://test-1259654469.cos.ap-guangzhou.myqcloud.com")b := &cos.BaseURL{BucketURL: u}c := cos.NewClient(b, &http.Client{Transport: &cos.AuthorizationTransport{// 环境变量 SECRETID 表示用户的 SecretId,登录访问管理控制台查看密钥,https://console.tencentcloud.com/cam/capiSecretID: os.Getenv("SECRETID"), // 用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1// 环境变量 SECRETKEY 表示用户的 SecretKey,登录访问管理控制台查看密钥,https://console.tencentcloud.com/cam/capiSecretKey: os.Getenv("SECRETKEY"), // 用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1},})// Go SDK v0.7.23及以上版本, 上传文件时默认都开启了 CRC64校验// c.Conf.EnableCRC = false // 手动关闭 CRC64校验,强烈不建议用户关闭 CRC64校验// 计算 MD5content := "test content"bs1 := calMD5Digest([]byte(content))md5str := fmt.Sprintf("%x", bs1)name := "exampleobject"f := strings.NewReader(content)opt := &cos.ObjectPutOptions{ObjectPutHeaderOptions: &cos.ObjectPutHeaderOptions{ContentMD5: base64.StdEncoding.EncodeToString(bs1), // 上传时服务器根据收到的文件和该值做校验XCosMetaXXX: &http.Header{},},ACLHeaderOptions: nil,}opt.XCosMetaXXX.Add("x-cos-meta-md5", md5str) // 下载时业务可通过该值做文件校验// 上传文件_, err := c.Object.Put(context.Background(), name, f, opt)if err != nil {// ERROR}// 下载文件resp, err := c.Object.Get(context.Background(), name, nil)if err != nil {// ERROR}defer resp.Body.Close()meta_md5 := resp.Header.Get("x-cos-meta-md5")body, _ := ioutil.ReadAll(resp.Body)bs2 := calMD5Digest(body)if fmt.Sprintf("%x", bs2) != meta_md5 {fmt.Printf("md5 is not consistent\\n")}}
type ObjectPutOptions struct {*ACLHeaderOptions*ObjectPutHeaderOptions}type ACLHeaderOptions struct {XCosACL stringXCosGrantRead stringXCosGrantWrite stringXCosGrantFullControl string}type ObjectPutHeaderOptions struct {CacheControl stringContentDisposition stringContentEncoding stringContentType stringContentMD5 stringContentLength int64Expires string// 自定义的 x-cos-meta-* headerXCosMetaXXX *http.HeaderXCosStorageClass stringXCosTrafficLimit intListener ProgressListener}
参数名称 | 参数描述 | 类型 | 是否必填 |
r | 上传文件的内容,可以为文件流或字节流,当 r 不是 bytes.Buffer/bytes.Reader/strings.Reader 时,必须指定 opt.ObjectPutHeaderOptions.ContentLength | io.Reader | 是 |
key | 对象键(Key)是对象在存储桶中的唯一标识。例如,在对象的访问域名 examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/doc/pic.jpg 中,对象键为 doc/pic.jpg | string | 是 |
XCosACL | 设置文件的 ACL,例如 private,public-read,public-read-write | string | 否 |
XCosGrantFullControl | 赋予被授权者所有的权限。格式:id="[OwnerUin]" | string | 否 |
XCosGrantRead | 赋予被授权者读的权限。格式:id="[OwnerUin]" | string | 否 |
XCosStorageClass | 文件的存储类型,例如 STANDARD、STANDARD_IA、ARCHIVE,默认值:STANDARD。更多存储类型,请参见 存储类型概述 | string | 否 |
Expires | 设置 Content-Expires | string | 否 |
CacheControl | 缓存策略,设置 Cache-Control | string | 否 |
ContentType | 内容类型,设置 Content-Type | string | 否 |
ContentMD5 | RFC 1864中定义的请求体内容的16字节二进制 MD5 哈希值的 Base64 编码形式,用于完整性检查,验证请求体在传输过程中是否发生变化,最终的取值长度应为24个字符,请注意在编写代码时使用正确的方法和参数,例如 ZzD3iDJdrMAAb00lgLLeig== | string | 否 |
ContentDisposition | 文件名称,设置 Content-Disposition | string | 否 |
ContentEncoding | 编码格式,设置 Content-Encoding | string | 否 |
ContentLength | 设置传输长度 | int64 | 否 |
XCosMetaXXX | 用户自定义的文件元信息, 必须以 x-cos-meta 开头,否则会被忽略 | http.Header | 否 |
XCosTrafficLimit | 设置单链接限速 | int | 否 |
Listener | 进度回调接口 | Struct | 否 |
{'ETag': 'string','x-cos-expiration': 'string'}
resp, err := client.Object.Put(context.Background(), key, f, nil)etag := resp.Header.Get("ETag")exp := resp.Header.Get("x-cos-expiration")
参数名称 | 参数描述 | 类型 |
ETag | 上传文件的 MD5 值 | string |
x-cos-expiration | 设置生命周期后,返回文件过期规则 | string |
func (s *ObjectService) Append(ctx context.Context, name string, position int, r io.Reader, opt *ObjectPutOptions) (int, *Response, error)
package mainimport ("context""github.com/tencentyun/cos-go-sdk-v5""net/http""net/url""os""strings")func main() {// 存储桶名称,由 bucketname-appid 组成,appid 必须填入,可以在 COS 控制台查看存储桶名称。 https://console.tencentcloud.com/cos5/bucket// 替换为用户的 region,存储桶 region 可以在 COS 控制台“存储桶概览”查看 https://console.tencentcloud.com/ ,关于地域的详情见 https://www.tencentcloud.com/document/product/436/6224?from_cn_redirect=1 。u, _ := url.Parse("https://examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com")b := &cos.BaseURL{BucketURL: u}client := cos.NewClient(b, &http.Client{Transport: &cos.AuthorizationTransport{// 通过环境变量获取密钥// 环境变量 SECRETID 表示用户的 SecretId,登录访问管理控制台查看密钥,https://console.tencentcloud.com/cam/capiSecretID: os.Getenv("SECRETID"), // 用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1// 环境变量 SECRETKEY 表示用户的 SecretKey,登录访问管理控制台查看密钥,https://console.tencentcloud.com/cam/capiSecretKey: os.Getenv("SECRETKEY"), // 用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1},})name := "exampleobject"pos, _, err := client.Object.Append(context.Background(), name, 0, strings.NewReader("test1"), nil)if err != nil {// ERROR}_, _, err = client.Object.Append(context.Background(), name, pos, strings.NewReader("test2"), nil)if err != nil {// ERROR}}
参数名称 | 参数描述 | 类型 |
name | 对象键(Key)是对象在存储桶中的唯一标识。例如,在对象的访问域名 examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/doc/pic.jpg 中,对象键为 doc/pic.jpg | string |
position | 追加操作的起始点,单位为字节。首次追加则设置 Position=0,后续追加则设置 Position 为当前 Object 的 content-length | int |
r | 上传文件的内容,可以为文件流或字节流,当 r 不是 bytes.Buffer/bytes.Reader/strings.Reader时,必须指定 opt.ObjectPutHeaderOptions.ContentLength | io.Reader |
opt | 上传参数,详见 ObjectPutOptions | struct |
参数名称 | 参数描述 | 类型 |
x-cos-next-append-position | 下一次追加操作的起始点,单位:字节 | int |
func (s *BucketService) ListMultipartUploads(ctx context.Context, opt *ListMultipartUploadsOptions) (*ListMultipartUploadsResult, *Response, error)
package mainimport ("context""github.com/tencentyun/cos-go-sdk-v5""net/http""net/url""os")func main() {// 存储桶名称,由 bucketname-appid 组成,appid 必须填入,可以在 COS 控制台查看存储桶名称。 https://console.tencentcloud.com/cos5/bucket// 替换为用户的 region,存储桶 region 可以在 COS 控制台“存储桶概览”查看 https://console.tencentcloud.com/ ,关于地域的详情见 https://www.tencentcloud.com/document/product/436/6224?from_cn_redirect=1 。u, _ := url.Parse("https://examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com")b := &cos.BaseURL{BucketURL: u}client := cos.NewClient(b, &http.Client{Transport: &cos.AuthorizationTransport{// 通过环境变量获取密钥// 环境变量 SECRETID 表示用户的 SecretId,登录访问管理控制台查看密钥,https://console.tencentcloud.com/cam/capiSecretID: os.Getenv("SECRETID"), // 用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1// 环境变量 SECRETKEY 表示用户的 SecretKey,登录访问管理控制台查看密钥,https://console.tencentcloud.com/cam/capiSecretKey: os.Getenv("SECRETKEY"), // 用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1},})_, _, err := client.Bucket.ListMultipartUploads(context.Background(), nil)if err != nil {panic(err)}}
type ListMultipartUploadsOptions struct {Delimiter stringEncodingType stringPrefix stringMaxUploads intKeyMarker stringUploadIDMarker string}
参数名称 | 参数描述 | 类型 | 是否必填 |
Delimiter | 定界符为一个符号,对 Object 名字包含指定前缀且第一次出现 delimiter 字符之间的 Object 作为一组元素:common prefix。如果没有 prefix,则从路径起点开始 | string | 否 |
EncodingType | 规定返回值的编码格式,合法值:url | string | 否 |
Prefix | 限定返回的 Object key 必须以 Prefix 作为前缀。注意使用 prefix 查询时,返回的 key 中仍会包含 Prefix | string | 否 |
MaxUploads | 设置最大返回的 multipart 数量,合法取值从1到1000,默认1000 | int | 否 |
KeyMarker | 与 upload-id-marker 一起使用: 当 upload-id-marker 未被指定时,ObjectName 字母顺序大于 key-marker 的条目将被列出 当 upload-id-marker 被指定时,ObjectName 字母顺序大于 key-marker 的条目被列出,ObjectName 字母顺序等于 key-marker 同时 UploadID 大于 upload-id-marker 的条目将被列出 | string | 否 |
UploadIDMarker | 与 key-marker 一起使用: 当 key-marker 未被指定时,upload-id-marker 将被忽略 当 key-marker 被指定时,ObjectName 字母顺序大于 key-marker 的条目被列出,ObjectName 字母顺序等于 key-marker 同时 UploadID 大于 upload-id-marker 的条目将被列出 | string | 否 |
// ListMultipartUploadsResult 保存 ListMultipartUploads 的结果type ListMultipartUploadsResult struct {Bucket stringEncodingType stringKeyMarker stringUploadIDMarker stringNextKeyMarker stringNextUploadIDMarker stringMaxUploads intIsTruncated boolUploads []struct {Key stringUploadID stringStorageClass stringInitiator *InitiatorOwner *OwnerInitiated string}Prefix stringDelimiter stringCommonPrefixes []string}// 与 Owner 使用同样的结构type Initiator Owner// Owner 定义了 Bucket/Object's 拥有者type Owner struct {ID stringDisplayName string}
参数名称 | 参数描述 | 类型 |
Bucket | 分块上传的目标 Bucket,格式为 BucketName,例如 examplebucket-1250000000 | string |
EncodingType | 默认不编码,规定返回值的编码方式,可选值:url | string |
KeyMarker | 列出条目从该 key 值开始 | string |
UploadIDMarker | 列出条目从该 UploadId 值开始 | string |
NextKeyMarker | 假如返回条目被截断,则返回 NextKeyMarker 就是下一个条目的起点 | string |
NextUploadIDMarker | 假如返回条目被截断,则返回 UploadId 就是下一个条目的起点 | string |
MaxUploads | 最多返回的分块的数量,默认为最大的1000 | string |
IsTruncated | 表示返回的分块是否被截断 | bool |
Uploads | 每个 Upload 的信息 | Container |
Key | Object 的名称 | string |
UploadID | 标示本次分块上传的 ID | string |
Key | 表示返回的分块是否被截断 | bool |
StorageClass | 用来表示分块的存储类型,例如 STANDARD、STANDARD_IA、ARCHIVE,默认值:STANDARD。更多存储类型,请参见 存储类型概述 | string |
Initiator | 用来表示本次上传发起者的信息 | Container |
Owner | 用来表示这些分块所有者的信息 | Container |
Initiated | 分块上传的起始时间 | string |
Prefix | 限定返回的 Objectkey 必须以 Prefix 作为前缀,注意使用 prefix 查询时,返回的 key 中仍会包含 Prefix | struct |
Delimiter | 定界符为一个符号,对 object 名字包含指定前缀且第一次出现 delimiter 字符之间的 object 作为一组元素:common prefix。如果没有prefix,则从路径起点开始 | string |
CommonPrefixes | 将 prefix 到 delimiter 之间的相同路径归为一类,定义为 Common Prefix | string |
ID | 用户唯一的 CAM 身份 ID | string |
DisplayName | 用户身份 ID 的简称(UIN) | string |
func (s *ObjectService) InitiateMultipartUpload(ctx context.Context, name string, opt *InitiateMultipartUploadOptions) (*InitiateMultipartUploadResult, *Response, error)
package mainimport ("context""fmt""github.com/tencentyun/cos-go-sdk-v5""net/http""net/url""os")func main() {// 存储桶名称,由 bucketname-appid 组成,appid 必须填入,可以在 COS 控制台查看存储桶名称。 https://console.tencentcloud.com/cos5/bucket// 替换为用户的 region,存储桶 region 可以在 COS 控制台“存储桶概览”查看 https://console.tencentcloud.com/ ,关于地域的详情见 https://www.tencentcloud.com/document/product/436/6224?from_cn_redirect=1 。u, _ := url.Parse("https://examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com")b := &cos.BaseURL{BucketURL: u}client := cos.NewClient(b, &http.Client{Transport: &cos.AuthorizationTransport{// 通过环境变量获取密钥// 环境变量 SECRETID 表示用户的 SecretId,登录访问管理控制台查看密钥,https://console.tencentcloud.com/cam/capiSecretID: os.Getenv("SECRETID"), // 用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参考 https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1// 环境变量 SECRETKEY 表示用户的 SecretKey,登录访问管理控制台查看密钥,https://console.tencentcloud.com/cam/capiSecretKey: os.Getenv("SECRETKEY"), // 用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参考 https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1},})name := "exampleobject"// 可选 opt,如果不是必要操作,建议上传文件时不要给单个文件设置权限,避免达到限制。若不设置默认继承桶的权限。v, _, err := client.Object.InitiateMultipartUpload(context.Background(), name, nil)if err != nil {panic(err)}UploadID := v.UploadIDfmt.Println(UploadID)}
type InitiateMultipartUploadOptions struct {*ACLHeaderOptions*ObjectPutHeaderOptions}type ACLHeaderOptions struct {XCosACL stringXCosGrantRead stringXCosGrantWrite stringXCosGrantFullControl string}type ObjectPutHeaderOptions struct {CacheControl stringContentDisposition stringContentEncoding stringContentType stringContentLength int64Expires string// 自定义的 x-cos-meta-* headerXCosMetaXXX *http.HeaderXCosStorageClass string}
参数名称 | 参数描述 | 类型 | 是否必填 |
key | 对象键(Key)是对象在存储桶中的唯一标识。例如,在对象的访问域名 examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/doc/pic.jpg 中,对象键为 doc/pic.jpg | string | 是 |
XCosACL | 设置文件 ACL,例如 private,public-read | string | 否 |
XCosGrantFullControl | 赋予被授权者所有的权限。格式:id="[OwnerUin]" | string | 否 |
XCosGrantRead | 赋予被授权者读的权限。格式:id="[OwnerUin]" | string | 否 |
XCosStorageClass | 文件的存储类型,例如 STANDARD、STANDARD_IA、ARCHIVE,默认值:STANDARD。更多存储类型,请参见 存储类型概述 | string | 否 |
Expires | 设置 Content-Expires | string | 否 |
CacheControl | 缓存策略,设置 Cache-Control | string | 否 |
ContentType | 内容类型,设置 Content-Type | string | 否 |
ContentDisposition | 文件名称,设置 Content-Disposition | string | 否 |
ContentEncoding | 编码格式,设置 Content-Encoding | string | 否 |
ContentLength | 设置传输长度 | int64 | 否 |
XCosMetaXXX | 用户自定义的文件元信息, 必须以 x-cos-meta 开头,否则会被忽略 | http.Header | 否 |
type InitiateMultipartUploadResult struct {Bucket stringKey stringUploadID string}
参数名称 | 参数描述 | 类型 |
UploadId | 标识分块上传的 ID | string |
Bucket | Bucket 名称,由 bucket-appid 组成 | string |
Key | 对象键(Key)是对象在存储桶中的唯一标识。例如,在对象的访问域名 examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/doc/pic.jpg 中,对象键为 doc/pic.jpg | string |
func (s *ObjectService) UploadPart(ctx context.Context, key, uploadID string, partNumber int, r io.Reader, opt *ObjectUploadPartOptions) (*Response, error)
package mainimport ("context""fmt""github.com/tencentyun/cos-go-sdk-v5""net/http""net/url""os""strings")func main() {// 存储桶名称,由 bucketname-appid 组成,appid 必须填入,可以在 COS 控制台查看存储桶名称。 https://console.tencentcloud.com/cos5/bucket// 替换为用户的 region,存储桶 region 可以在 COS 控制台“存储桶概览”查看 https://console.tencentcloud.com/ ,关于地域的详情见 https://www.tencentcloud.com/document/product/436/6224?from_cn_redirect=1 。u, _ := url.Parse("https://examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com")b := &cos.BaseURL{BucketURL: u}client := cos.NewClient(b, &http.Client{Transport: &cos.AuthorizationTransport{// 通过环境变量获取密钥// 环境变量 SECRETID 表示用户的 SecretId,登录访问管理控制台查看密钥,https://console.tencentcloud.com/cam/capiSecretID: os.Getenv("SECRETID"), // 用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1// 环境变量 SECRETKEY 表示用户的 SecretKey,登录访问管理控制台查看密钥,https://console.tencentcloud.com/cam/capiSecretKey: os.Getenv("SECRETKEY"), // 用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1},})name := "exampleobject"// 可选 opt,如果不是必要操作,建议上传文件时不要给单个文件设置权限,避免达到限制。若不设置默认继承桶的权限。v, _, err := client.Object.InitiateMultipartUpload(context.Background(), name, nil)if err != nil {panic(err)}UploadID := v.UploadIDfmt.Println(UploadID)// 注意,上传分块的块数最多10000块key := "exampleobject"f := strings.NewReader("test hello")// opt 可选resp, err := client.Object.UploadPart(context.Background(), key, UploadID, 1, f, nil,)if err != nil {panic(err)}PartETag := resp.Header.Get("ETag")fmt.Println(PartETag)}
type ObjectUploadPartOptions struct {ContentLength int64ContentMD5 string}
参数名称 | 参数描述 | 类型 | 是否必填 |
key | 对象键(Key)是对象在存储桶中的唯一标识。例如,在对象的访问域名 examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/doc/pic.jpg 中,对象键为 doc/pic.jpg | string | 是 |
UploadId | 标识分块上传的 ID,由 InitiateMultipartUpload 生成 | string | 是 |
PartNumber | 标识上传分块的序号 | int | 是 |
r | 上传分块的内容,可以为本地文件流或输入流。当 r 不是 bytes.Buffer/bytes.Reader/strings.Reader 时,必须指定 opt.ContentLength | io.Reader | 是 |
ContentLength | 设置传输长度 | int64 | 否 |
ContentMD5 | RFC 1864中定义的请求体内容的16字节二进制 MD5 哈希值的 Base64 编码形式,用于完整性检查,验证请求体在传输过程中是否发生变化,最终的取值长度应为24个字符,请注意在编写代码时使用正确的方法和参数,例如 ZzD3iDJdrMAAb00lgLLeig== | string | 否 |
{'ETag': 'string'}
resp, err := client.Object.UploadPart(context.Background(), key, UploadID, 1, f, nil)etag := resp.Header.Get("ETag")
参数名称 | 参数描述 | 类型 |
ETag | 上传分块的 MD5 值 | string |
func (s *ObjectService) ListParts(ctx context.Context, name, uploadID string, opt *ObjectListPartsOptions) (*ObjectListPartsResult, *Response, error)
package mainimport ("context""fmt""github.com/tencentyun/cos-go-sdk-v5""net/http""net/url""os")func main() {// 存储桶名称,由 bucketname-appid 组成,appid 必须填入,可以在 COS 控制台查看存储桶名称。 https://console.tencentcloud.com/cos5/bucket// 替换为用户的 region,存储桶 region 可以在 COS 控制台“存储桶概览”查看 https://console.tencentcloud.com/ ,关于地域的详情见 https://www.tencentcloud.com/document/product/436/6224?from_cn_redirect=1 。u, _ := url.Parse("https://examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com")b := &cos.BaseURL{BucketURL: u}client := cos.NewClient(b, &http.Client{Transport: &cos.AuthorizationTransport{// 通过环境变量获取密钥// 环境变量 SECRETID 表示用户的 SecretId,登录访问管理控制台查看密钥,https://console.tencentcloud.com/cam/capiSecretID: os.Getenv("SECRETID"), // 用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参考 https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1// 环境变量 SECRETKEY 表示用户的 SecretKey,登录访问管理控制台查看密钥,https://console.tencentcloud.com/cam/capiSecretKey: os.Getenv("SECRETKEY"), // 用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参考 https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1},})key := "exampleobject"v, _, err := client.Object.InitiateMultipartUpload(context.Background(), key, nil)if err != nil {panic(err)}UploadID := v.UploadIDfmt.Println(UploadID)_, _, err = client.Object.ListParts(context.Background(), key, UploadID, nil)if err != nil {panic(err)}}
type ObjectListPartsOptions struct {EncodingType stringMaxParts stringPartNumberMarker string}
参数名称 | 参数描述 | 类型 | 是否必填 |
key | 对象键(Key)是对象在存储桶中的唯一标识。例如,在对象的访问域名 examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/doc/pic.jpg 中,对象键为 doc/pic.jpg | string | 是 |
UploadId | 标识分块上传的 ID,由 InitiateMultipartUpload 生成 | string | 是 |
EncodingType | 规定返回值的编码方式 | string | 否 |
MaxParts | 单次返回最大的条目数量,默认1000 | string | 否 |
PartNumberMarker | 默认以 UTF-8 二进制顺序列出条目,所有列出条目从 marker 开始 | string | 否 |
type ObjectListPartsResult struct {Bucket stringEncodingType stringKey stringUploadID stringInitiator *InitiatorOwner *OwnerStorageClass stringPartNumberMarker stringNextPartNumberMarker stringMaxParts stringIsTruncated boolParts []Object}type Initiator struct {UIN stringID stringDisplayName string}type Owner struct {UIN stringID stringDisplayName string}type Object struct {Key stringETag stringSize intPartNumber intLastModified stringStorageClass stringOwner *Owner}
参数名称 | 参数描述 | 类型 |
Bucket | 存储桶名称,格式:BucketName-APPID。例如 examplebucket-1250000000 | string |
EncodingType | 默认不编码,规定返回值的编码方式,可选值:url | string |
Key | 对象键(Key)是对象在存储桶中的唯一标识。例如,在对象的访问域名 examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/doc/pic.jpg 中,对象键为 doc/pic.jpg | string |
UploadId | 标识分块上传的 ID,由 InitiateMultipartUpload 生成 | string |
Initiator | 分块上传的创建者,包括 DisplayName,UIN 和 ID | struct |
Owner | 文件拥有者的信息,包括 DisplayName ,UIN 和 ID | struct |
StorageClass | 文件的存储类型,例如 STANDARD、STANDARD_IA、ARCHIVE,默认值:STANDARD。更多存储类型,请参见 存储类型概述 | string |
PartNumberMarker | 默认为0,从第一块列出分块,从 PartNumberMarker 下一个分块开始列出 | string |
NextPartNumberMarker | 指明下一次列出分块的起始位置 | string |
MaxParts | 最多返回的分块的数量,默认为最大的1000 | string |
IsTruncated | 表示返回的分块是否被截断 | bool |
Part | 上传分块的相关信息,包括 ETag,PartNumber,Size,LastModified | struct |
func (s *ObjectService) CompleteMultipartUpload(ctx context.Context, key, uploadID string, opt *CompleteMultipartUploadOptions) (*CompleteMultipartUploadResult, *Response, error)
package mainimport ("context""fmt""github.com/tencentyun/cos-go-sdk-v5""net/http""net/url""os""strings")func main() {// 存储桶名称,由 bucketname-appid 组成,appid 必须填入,可以在 COS 控制台查看存储桶名称。 https://console.tencentcloud.com/cos5/bucket// 替换为用户的 region,存储桶 region 可以在 COS 控制台“存储桶概览”查看 https://console.tencentcloud.com/ ,关于地域的详情见 https://www.tencentcloud.com/document/product/436/6224?from_cn_redirect=1 。u, _ := url.Parse("https://examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com")b := &cos.BaseURL{BucketURL: u}client := cos.NewClient(b, &http.Client{Transport: &cos.AuthorizationTransport{// 通过环境变量获取密钥// 环境变量 SECRETID 表示用户的 SecretId,登录访问管理控制台查看密钥,https://console.tencentcloud.com/cam/capiSecretID: os.Getenv("SECRETID"), // 用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1// 环境变量 SECRETKEY 表示用户的 SecretKey,登录访问管理控制台查看密钥,https://console.tencentcloud.com/cam/capiSecretKey: os.Getenv("SECRETKEY"), // 用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1},})name := "exampleobject"// 可选 opt,如果不是必要操作,建议上传文件时不要给单个文件设置权限,避免达到限制。若不设置默认继承桶的权限。v, _, err := client.Object.InitiateMultipartUpload(context.Background(), name, nil)if err != nil {panic(err)}UploadID := v.UploadIDfmt.Println(UploadID)// 注意,上传分块的块数最多10000块key := "exampleobject"f := strings.NewReader("test hello")// opt可选resp, err := client.Object.UploadPart(context.Background(), key, UploadID, 1, f, nil,)if err != nil {panic(err)}PartETag := resp.Header.Get("ETag")fmt.Println(PartETag)opt := &cos.CompleteMultipartUploadOptions{}opt.Parts = append(opt.Parts, cos.Object{PartNumber: 1, ETag: PartETag},)_, _, err = client.Object.CompleteMultipartUpload(context.Background(), key, UploadID, opt,)if err != nil {panic(err)}}
type CompleteMultipartUploadOptions struct {Parts []Object}type Object struct {ETag stringPartNumber int}
参数名称 | 参数描述 | 类型 | 是否必填 |
key | 对象键(Key)是对象在存储桶中的唯一标识。例如,在对象的访问域名 examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/doc/pic.jpg 中,对象键为 doc/pic.jpg | string | 是 |
UploadId | 标识分块上传的 ID,由 InitiateMultipartUpload 生成 | string | 是 |
CompleteMultipartUploadOptions | 所有分块的 ETag 和 PartNumber 信息 | struct | 是 |
type CompleteMultipartUploadResult struct {Location stringBucket stringKey stringETag string}
参数名称 | 参数描述 | 类型 |
Location | URL 地址 | string |
Bucket | 存储桶名称,格式:BucketName-APPID。例如 examplebucket-1250000000 | string |
Key | 对象键(Key)是对象在存储桶中的唯一标识。例如,在对象的访问域名 examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/doc/pic.jpg 中,对象键为 doc/pic.jpg | string |
ETag | 合并后对象的唯一标签值,该值不是对象内容的 MD5 校验值,仅能用于检查对象唯一性。如需校验文件内容,可以在上传过程中校验单个分块的 ETag 值 | string |
func (s *ObjectService) AbortMultipartUpload(ctx context.Context, key, uploadID string) (*Response, error)
package mainimport ("context""github.com/tencentyun/cos-go-sdk-v5""net/http""net/url""os")func main() {// 存储桶名称,由 bucketname-appid 组成,appid 必须填入,可以在 COS 控制台查看存储桶名称。 https://console.tencentcloud.com/cos5/bucket// 替换为用户的 region,存储桶 region 可以在 COS 控制台“存储桶概览”查看 https://console.tencentcloud.com/ ,关于地域的详情见 https://www.tencentcloud.com/document/product/436/6224?from_cn_redirect=1 。u, _ := url.Parse("https://examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com")b := &cos.BaseURL{BucketURL: u}client := cos.NewClient(b, &http.Client{Transport: &cos.AuthorizationTransport{// 通过环境变量获取密钥// 环境变量 SECRETID 表示用户的 SecretId,登录访问管理控制台查看密钥,https://console.tencentcloud.com/cam/capiSecretID: os.Getenv("SECRETID"), // 用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参考 https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1// 环境变量 SECRETKEY 表示用户的 SecretKey,登录访问管理控制台查看密钥,https://console.tencentcloud.com/cam/capiSecretKey: os.Getenv("SECRETKEY"), // 用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参考 https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1},})key := "exampleobject"v, _, err := client.Object.InitiateMultipartUpload(context.Background(), key, nil)if err != nil {panic(err)}UploadID := v.UploadID// Abort_, err = client.Object.AbortMultipartUpload(context.Background(), key, UploadID)if err != nil {panic(err)}}
参数名称 | 参数描述 | 类型 | 是否必填 |
key | 对象键(Key)是对象在存储桶中的唯一标识。例如,在对象的访问域名 examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/doc/pic.jpg 中,对象键为 doc/pic.jpg | string | 是 |
UploadId | 标识分块上传的 ID | string | 是 |
本页内容是否解决了您的问题?