{"id":43216465,"url":"https://github.com/guoyao/baidubce-sdk-go","last_synced_at":"2026-02-01T08:09:27.069Z","repository":{"id":57485791,"uuid":"45965069","full_name":"guoyao/baidubce-sdk-go","owner":"guoyao","description":"Unofficial Go SDK for Baidu Cloud Engine","archived":false,"fork":false,"pushed_at":"2018-12-27T04:41:08.000Z","size":1992,"stargazers_count":21,"open_issues_count":0,"forks_count":10,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-08-13T21:02:21.817Z","etag":null,"topics":["baidubce-sdk","baidubce-sdk-go","bce","bce-sdk","bce-sdk-go"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/guoyao.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-11-11T06:57:31.000Z","updated_at":"2024-01-15T04:00:58.000Z","dependencies_parsed_at":"2022-09-11T16:01:37.951Z","dependency_job_id":null,"html_url":"https://github.com/guoyao/baidubce-sdk-go","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/guoyao/baidubce-sdk-go","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guoyao%2Fbaidubce-sdk-go","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guoyao%2Fbaidubce-sdk-go/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guoyao%2Fbaidubce-sdk-go/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guoyao%2Fbaidubce-sdk-go/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/guoyao","download_url":"https://codeload.github.com/guoyao/baidubce-sdk-go/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guoyao%2Fbaidubce-sdk-go/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28973260,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-01T06:46:42.625Z","status":"ssl_error","status_checked_at":"2026-02-01T06:44:56.173Z","response_time":56,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["baidubce-sdk","baidubce-sdk-go","bce","bce-sdk","bce-sdk-go"],"created_at":"2026-02-01T08:09:26.490Z","updated_at":"2026-02-01T08:09:27.064Z","avatar_url":"https://github.com/guoyao.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# baidubce-sdk-go\n\nUnofficial Go SDK for [Baidu Cloud Engine](https://cloud.baidu.com/)（support go 1.3+）\n\n[![Build Status](https://api.travis-ci.org/guoyao/baidubce-sdk-go.png?branch=master)](http://travis-ci.org/guoyao/baidubce-sdk-go)\n[![codecov](https://codecov.io/gh/guoyao/baidubce-sdk-go/branch/master/graph/badge.svg)](https://codecov.io/gh/guoyao/baidubce-sdk-go)\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n\n## Package Structure\n\n* bos: [Baidu Object Storage](https://cloud.baidu.com/doc/BOS/API.html) [![GoDoc](https://godoc.org/github.com/guoyao/baidubce-sdk-go/bos?status.svg)](https://godoc.org/github.com/guoyao/baidubce-sdk-go/bos)\n* bce: Common library of Baidubce Go SDK [![GoDoc](https://godoc.org/github.com/guoyao/baidubce-sdk-go/bce?status.svg)](https://godoc.org/github.com/guoyao/baidubce-sdk-go/bce)\n* util: Utility helpers [![GoDoc](https://godoc.org/github.com/guoyao/baidubce-sdk-go/util?status.svg)](https://godoc.org/github.com/guoyao/baidubce-sdk-go/util)\n\n## Install\n\n```\ngo get github.com/guoyao/baidubce-sdk-go/...\n```\n## Run Test\n\nBefore run test, you should setup two environment variables: `BAIDU_BCE_AK` and `BAIDU_BCE_SK`\n\n```\ngo test -v github.com/guoyao/baidubce-sdk-go/...\n```\n\n## Usage\n\n```go\nimport (\n\t\"github.com/guoyao/baidubce-sdk-go/bce\"\n\t\"github.com/guoyao/baidubce-sdk-go/bos\"\n\t\"github.com/guoyao/baidubce-sdk-go/util\"\n)\n\nvar credentials = bce.NewCredentials(\"AK\", \"SK\")\nvar bceConfig = bce.NewConfig(credentials)\nvar bosConfig = bos.NewConfig(bceConfig)\nvar bosClient = bos.NewClient(bosConfig)\n```\n\n### CreateBucket\n\n```go\nfunc CreateBucket() {\n\tbucketName := \"baidubce-sdk-go\"\n\terr := bosClient.CreateBucket(bucketName, nil)\n\n\tif err != nil {\n\t\tlog.Println(err)\n\t} else {\n\t\terr := bosClient.DeleteBucket(bucketName, nil)\n\n\t\tif err != nil {\n\t\t\tlog.Println(err)\n\t\t}\n\t}\n}\n```\n\n### PutObject\n\n```go\nfunc PutObject() {\n\t/*------------------ put object from string --------------------*/\n\tbucketName := \"baidubce-sdk-go\"\n\tobjectKey := \"examples/put-object-from-string.txt\"\n\tstr := \"Hello World 你好\"\n\n\toption := new(bce.SignOption)\n\tmetadata := new(bos.ObjectMetadata)\n\tmetadata.StorageClass = bos.STORAGE_CLASS_STANDARD_IA\n\tmetadata.AddUserMetadata(\"x-bce-meta-name\", \"guoyao\")\n\tputObjectResponse, err := bosClient.PutObject(bucketName, objectKey, str, metadata, option)\n\n\tif err != nil {\n\t\tlog.Println(err)\n\t} else {\n\t\tfmt.Println(putObjectResponse.GetETag())\n\t}\n\n\t/*------------------ put object from bytes --------------------*/\n\tobjectKey = \"examples/put-object-from-bytes\"\n\tbyteArray := make([]byte, 1024, 1024)\n\tputObjectResponse, err = bosClient.PutObject(bucketName, objectKey, byteArray, nil, nil)\n\n\tif err != nil {\n\t\tlog.Println(err)\n\t} else {\n\t\tfmt.Println(putObjectResponse.GetETag())\n\t}\n\n\t/*------------------ put object from file --------------------*/\n\tfile, err := util.TempFileWithSize(1024)\n\n\tdefer func() {\n\t\tif file != nil {\n\t\t\tfile.Close()\n\t\t\tos.Remove(file.Name())\n\t\t}\n\t}()\n\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\n\tobjectKey = \"examples/put-object-from-file\"\n\n\tif err != nil {\n\t\tlog.Println(err)\n\t} else {\n\t\tputObjectResponse, err = bosClient.PutObject(bucketName, objectKey, file, nil, nil)\n\n\t\tif err != nil {\n\t\t\tlog.Println(err)\n\t\t} else {\n\t\t\tfmt.Println(putObjectResponse.GetETag())\n\t\t}\n\t}\n}\n```\n\n### MultipartUpload\n\n```go\nfunc MultipartUpload() {\n\tbucketName := \"baidubce-sdk-go\"\n\tobjectKey := \"examples/test-multipart-upload\"\n\n\tinitiateMultipartUploadRequest := bos.InitiateMultipartUploadRequest{\n\t\tBucketName: bucketName,\n\t\tObjectKey:  objectKey,\n\t}\n\n\tinitiateMultipartUploadResponse, err := bosClient.InitiateMultipartUpload(initiateMultipartUploadRequest, nil)\n\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tuploadId := initiateMultipartUploadResponse.UploadId\n\n\tfiles := make([]*os.File, 0)\n\tfile, err := util.TempFileWithSize(1024 * 1024 * 6)\n\tfiles = append(files, file)\n\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\n\tdefer func() {\n\t\tfor _, f := range files {\n\t\t\tf.Close()\n\t\t\tos.Remove(f.Name())\n\t\t}\n\t}()\n\n\tfileInfo, err := file.Stat()\n\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\n\tvar partSize int64 = 1024 * 1024 * 5\n\tvar totalSize int64 = fileInfo.Size()\n\tvar partCount int = int(math.Ceil(float64(totalSize) / float64(partSize)))\n\n\tparts := make([]bos.PartSummary, 0, partCount)\n\n\tfor i := 0; i \u003c partCount; i++ {\n\t\tvar skipBytes int64 = partSize * int64(i)\n\t\tvar size int64 = int64(math.Min(float64(totalSize-skipBytes), float64(partSize)))\n\n\t\ttempFile, err := util.TempFile(nil, \"\", \"\")\n\t\tfiles = append(files, tempFile)\n\n\t\tif err != nil {\n\t\t\tpanic(err)\n\t\t}\n\n\t\tlimitReader := io.LimitReader(file, size)\n\t\t_, err = io.Copy(tempFile, limitReader)\n\n\t\tif err != nil {\n\t\t\tpanic(err)\n\t\t}\n\n\t\tpartNumber := i + 1\n\n\t\tuploadPartRequest := bos.UploadPartRequest{\n\t\t\tBucketName: bucketName,\n\t\t\tObjectKey:  objectKey,\n\t\t\tUploadId:   uploadId,\n\t\t\tPartSize:   size,\n\t\t\tPartNumber: partNumber,\n\t\t\tPartData:   tempFile,\n\t\t}\n\n\t\tparts = append(parts, bos.PartSummary{PartNumber: partNumber})\n\n\t\tuploadPartResponse, err := bosClient.UploadPart(uploadPartRequest, nil)\n\n\t\tif err != nil {\n\t\t\tpanic(err)\n\t\t}\n\n\t\tparts[partNumber-1].ETag = uploadPartResponse.GetETag()\n\t}\n\n\tcompleteMultipartUploadRequest := bos.CompleteMultipartUploadRequest{\n\t\tBucketName: bucketName,\n\t\tObjectKey:  objectKey,\n\t\tUploadId:   uploadId,\n\t\tParts:      parts,\n\t}\n\n\tcompleteMultipartUploadResponse, err := bosClient.CompleteMultipartUpload(\n\t\tcompleteMultipartUploadRequest, nil)\n\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tfmt.Println(completeMultipartUploadResponse.ETag)\n}\n```\n\n### MultipartUploadFromFile\n\n```go\nfunc MultipartUploadFromFile() {\n\tbucketName := \"baidubce-sdk-go\"\n\tobjectKey := \"examples/test-multipart-upload-from-file\"\n\n\tfile, err := util.TempFileWithSize(1024 * 1024 * 10)\n\n\tdefer func() {\n\t\tif file != nil {\n\t\t\tfile.Close()\n\t\t\tos.Remove(file.Name())\n\t\t}\n\t}()\n\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\n\tvar partSize int64 = 1024 * 1024 * 2\n\n\tcompleteMultipartUploadResponse, err := bosClient.MultipartUploadFromFile(bucketName,\n\t\tobjectKey, file.Name(), partSize)\n\n\tif err != nil {\n\t\tlog.Println(err)\n\t} else {\n\t\tfmt.Println(completeMultipartUploadResponse.ETag)\n\t}\n}\n```\n\n### GetSessionToken\n\n```go\nfunc GetSessionToken() {\n\treq := bce.SessionTokenRequest{\n\t\tDurationSeconds: 600,\n\t\tAccessControlList: []bce.AccessControlListItem{\n\t\t\tbce.AccessControlListItem{\n\t\t\t\tService:    \"bce:bos\",\n\t\t\t\tRegion:     \"bj\",\n\t\t\t\tEffect:     \"Allow\",\n\t\t\t\tResource:   []string{\"baidubce-sdk-go/*\"},\n\t\t\t\tPermission: []string{\"READ\"},\n\t\t\t},\n\t\t},\n\t}\n\n\tsessionTokenResponse, err := bceClient.GetSessionToken(req, nil)\n\n\tif err != nil {\n\t\tlog.Println(err)\n\t} else {\n\t\tfmt.Println(sessionTokenResponse)\n\t}\n}\n```\n\n### putObjectBySTS\n\n```go\nfunc putObjectBySTS() {\n\tbucketName := \"baidubce-sdk-go\"\n\tobjectKey := \"examples/put-object-from-string.txt\"\n\tstr := \"Hello World 你好\"\n\n\treq := bce.SessionTokenRequest{\n\t\tDurationSeconds: 600,\n\t\tAccessControlList: []bce.AccessControlListItem{\n\t\t\tbce.AccessControlListItem{\n\t\t\t\tService:    \"bce:bos\",\n\t\t\t\tRegion:     \"bj\",\n\t\t\t\tEffect:     \"Allow\",\n\t\t\t\tResource:   []string{bucketName + \"/*\"},\n\t\t\t\tPermission: []string{\"READ\", \"WRITE\"},\n\t\t\t},\n\t\t},\n\t}\n\n\tsessionTokenResponse, err := bosClient.GetSessionToken(req, nil)\n\n\tif err != nil {\n\t\tlog.Println(err)\n\t} else {\n\t\toption := \u0026bce.SignOption{\n\t\t\tCredentials: bce.NewCredentials(sessionTokenResponse.AccessKeyId, sessionTokenResponse.SecretAccessKey),\n\t\t\tHeaders:     map[string]string{\"x-bce-security-token\": sessionTokenResponse.SessionToken},\n\t\t}\n\t\tputObjectResponse, err := bosClient.PutObject(bucketName, objectKey, str, nil, option)\n\n\t\tif err != nil {\n\t\t\tlog.Println(err)\n\t\t} else {\n\t\t\tfmt.Println(putObjectResponse.GetETag())\n\t\t}\n\t}\n}\n```\n\n### Others\n\nMore api usages please refer\n\n* [bos/client_test.go](bos/client_test.go)\n* [baidubce-sdk-go-examples](https://github.com/guoyao/baidubce-sdk-go-examples)\n\n## Authors\n\n**Guoyao Wu**\n\n+ [https://guoyao.me](https://guoyao.me)\n+ [https://github.com/guoyao](https://github.com/guoyao)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fguoyao%2Fbaidubce-sdk-go","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fguoyao%2Fbaidubce-sdk-go","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fguoyao%2Fbaidubce-sdk-go/lists"}