go-cos icon indicating copy to clipboard operation
go-cos copied to clipboard

腾讯云对象存储服务 COS(Cloud Object Storage) Go SDK(XML API)

go-cos

腾讯云对象存储服务 COS(Cloud Object Storage) Go SDK(API 版本:V5 版本的 XML API)。

Build Status Coverage Status Go Report Card GoDoc

Install

go get -u github.com/mozillazg/go-cos

推荐使用 go mod 之类的技术指定使用的 go-cos 包版本号。

Usage

package main

import (
	"context"
	"fmt"
	"io/ioutil"
	"net/http"
	"net/url"
	"os"

	"github.com/mozillazg/go-cos"
)

func main() {
	b, _ := cos.NewBaseURL("https://<bucket>-<appid>.cos.<region>.myqcloud.com")
	c := cos.NewClient(b, &http.Client{
		Transport: &cos.AuthorizationTransport{
			SecretID:  os.Getenv("COS_SECRETID"),
			SecretKey: os.Getenv("COS_SECRETKEY"),
		},
	})

	name := "test/hello.txt"
	resp, err := c.Object.Get(context.Background(), name, nil)
	if err != nil {
		panic(err)
	}
	defer resp.Body.Close()
	bs, _ := ioutil.ReadAll(resp.Body)
	fmt.Printf("%s\n", string(bs))
}

备注:

  • SDK 不会自动设置超时时间,用户根据需要设置合适的超时时间(比如,设置 http.ClientTimeout 字段或者 Transport 字段之类的)或在需要时实现所需的超时机制(比如,通过 context 包实现)。
  • 所有的 API 在 _example 目录下都有对应的使用示例(示例程序中用到的 debug 包只是调试用的不是必需的依赖)。

TODO

Service API:

  • [x] Get Service(使用示例:service/get.go

Bucket API:

  • [x] Get Bucket(搜索文件,使用示例:bucket/get.go
  • [x] Get Bucket ACL(使用示例:bucket/getACL.go
  • [x] Get Bucket CORS(使用示例:bucket/getCORS.go
  • [x] Get Bucket Location(使用示例:bucket/getLocation.go
  • [x] Get Buket Lifecycle(使用示例:bucket/getLifecycle.go
  • [x] Get Bucket Tagging(使用示例:bucket/getTagging.go
  • [ ] Get Bucket policy
  • [x] Put Bucket(创建 bucket,使用示例:bucket/put.go
  • [x] Put Bucket ACL(使用示例:bucket/putACL.go
  • [x] Put Bucket CORS(使用示例:bucket/putCORS.go
  • [x] Put Bucket Lifecycle(使用示例:bucket/putLifecycle.go
  • [x] Put Bucket Tagging(使用示例:bucket/putTagging.go
  • [ ] Put Bucket policy
  • [x] Delete Bucket(删除 bucket,使用示例:bucket/delete.go
  • [x] Delete Bucket CORS(使用示例:bucket/deleteCORS.go
  • [x] Delete Bucket Lifecycle(使用示例:bucket/deleteLifecycle.go
  • [x] Delete Bucket Tagging(使用示例:bucket/deleteTagging.go
  • [ ] Delete Bucket policy
  • [x] Head Bucket(使用示例:bucket/head.go
  • [x] List Multipart Uploads(查询上传的分块,使用示例:bucket/listMultipartUploads.go

Object API:

  • [x] Append Object(增量更新文件,使用示例:object/append.go
  • [x] Get Object(下载文件,使用示例:object/get.go
  • [x] Get Object ACL(使用示例:object/getACL.go
  • [x] Put Object(上传文件,使用示例:object/put.go or object/uploadFile.go
  • [x] Put Object ACL(使用示例:object/putACL.go
  • [x] Put Object Copy(使用示例:object/copy.go
  • [x] Delete Object(删除文件,使用示例:object/delete.go
  • [ ] Post Object
  • [ ] Post Object restore
  • [x] Delete Multiple Object(使用示例:object/deleteMultiple.go
  • [x] Head Object(使用示例:object/head.go
  • [x] Options Object(使用示例:object/options.go
  • [x] Initiate Multipart Upload(初始化分块上传,使用示例:object/initiateMultipartUpload.go
  • [x] Upload Part(上传一个分块,使用示例:object/uploadPart.go
  • [ ] Upload Part - Copy
  • [x] List Parts(列出已上传的分块,使用示例:object/listParts.go
  • [x] Complete Multipart Upload(合并上传的分块,使用示例:object/completeMultipartUpload.go
  • [x] Abort Multipart Upload(取消分块上传,使用示例:object/abortMultipartUpload.go

其他功能:

  • [x] 生成预签名授权 URL
    • [x] 通过预签名授权 URL 下载文件,示例:object/getWithPresignedURL.go
    • [x] 通过预签名授权 URL 上传文件,示例:object/putWithPresignedURL.go
  • [x] 支持临时密钥,示例: object/sessionToken.go
  • [x] 支持使用使用第三方 http client 包或单元测试时 mock 方法调用结果,示例:object/mock.go