https://github.com/guoyao/baidubce-sdk-go
Unofficial Go SDK for Baidu Cloud Engine
https://github.com/guoyao/baidubce-sdk-go
baidubce-sdk baidubce-sdk-go bce bce-sdk bce-sdk-go
Last synced: 5 months ago
JSON representation
Unofficial Go SDK for Baidu Cloud Engine
- Host: GitHub
- URL: https://github.com/guoyao/baidubce-sdk-go
- Owner: guoyao
- License: apache-2.0
- Created: 2015-11-11T06:57:31.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2018-12-27T04:41:08.000Z (over 7 years ago)
- Last Synced: 2025-08-13T21:02:21.817Z (10 months ago)
- Topics: baidubce-sdk, baidubce-sdk-go, bce, bce-sdk, bce-sdk-go
- Language: Go
- Homepage:
- Size: 1.9 MB
- Stars: 21
- Watchers: 2
- Forks: 10
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# baidubce-sdk-go
Unofficial Go SDK for [Baidu Cloud Engine](https://cloud.baidu.com/)(support go 1.3+)
[](http://travis-ci.org/guoyao/baidubce-sdk-go)
[](https://codecov.io/gh/guoyao/baidubce-sdk-go)
[](https://opensource.org/licenses/Apache-2.0)
## Package Structure
* bos: [Baidu Object Storage](https://cloud.baidu.com/doc/BOS/API.html) [](https://godoc.org/github.com/guoyao/baidubce-sdk-go/bos)
* bce: Common library of Baidubce Go SDK [](https://godoc.org/github.com/guoyao/baidubce-sdk-go/bce)
* util: Utility helpers [](https://godoc.org/github.com/guoyao/baidubce-sdk-go/util)
## Install
```
go get github.com/guoyao/baidubce-sdk-go/...
```
## Run Test
Before run test, you should setup two environment variables: `BAIDU_BCE_AK` and `BAIDU_BCE_SK`
```
go test -v github.com/guoyao/baidubce-sdk-go/...
```
## Usage
```go
import (
"github.com/guoyao/baidubce-sdk-go/bce"
"github.com/guoyao/baidubce-sdk-go/bos"
"github.com/guoyao/baidubce-sdk-go/util"
)
var credentials = bce.NewCredentials("AK", "SK")
var bceConfig = bce.NewConfig(credentials)
var bosConfig = bos.NewConfig(bceConfig)
var bosClient = bos.NewClient(bosConfig)
```
### CreateBucket
```go
func CreateBucket() {
bucketName := "baidubce-sdk-go"
err := bosClient.CreateBucket(bucketName, nil)
if err != nil {
log.Println(err)
} else {
err := bosClient.DeleteBucket(bucketName, nil)
if err != nil {
log.Println(err)
}
}
}
```
### PutObject
```go
func PutObject() {
/*------------------ put object from string --------------------*/
bucketName := "baidubce-sdk-go"
objectKey := "examples/put-object-from-string.txt"
str := "Hello World 你好"
option := new(bce.SignOption)
metadata := new(bos.ObjectMetadata)
metadata.StorageClass = bos.STORAGE_CLASS_STANDARD_IA
metadata.AddUserMetadata("x-bce-meta-name", "guoyao")
putObjectResponse, err := bosClient.PutObject(bucketName, objectKey, str, metadata, option)
if err != nil {
log.Println(err)
} else {
fmt.Println(putObjectResponse.GetETag())
}
/*------------------ put object from bytes --------------------*/
objectKey = "examples/put-object-from-bytes"
byteArray := make([]byte, 1024, 1024)
putObjectResponse, err = bosClient.PutObject(bucketName, objectKey, byteArray, nil, nil)
if err != nil {
log.Println(err)
} else {
fmt.Println(putObjectResponse.GetETag())
}
/*------------------ put object from file --------------------*/
file, err := util.TempFileWithSize(1024)
defer func() {
if file != nil {
file.Close()
os.Remove(file.Name())
}
}()
if err != nil {
log.Fatal(err)
}
objectKey = "examples/put-object-from-file"
if err != nil {
log.Println(err)
} else {
putObjectResponse, err = bosClient.PutObject(bucketName, objectKey, file, nil, nil)
if err != nil {
log.Println(err)
} else {
fmt.Println(putObjectResponse.GetETag())
}
}
}
```
### MultipartUpload
```go
func MultipartUpload() {
bucketName := "baidubce-sdk-go"
objectKey := "examples/test-multipart-upload"
initiateMultipartUploadRequest := bos.InitiateMultipartUploadRequest{
BucketName: bucketName,
ObjectKey: objectKey,
}
initiateMultipartUploadResponse, err := bosClient.InitiateMultipartUpload(initiateMultipartUploadRequest, nil)
if err != nil {
panic(err)
}
uploadId := initiateMultipartUploadResponse.UploadId
files := make([]*os.File, 0)
file, err := util.TempFileWithSize(1024 * 1024 * 6)
files = append(files, file)
if err != nil {
log.Fatal(err)
}
defer func() {
for _, f := range files {
f.Close()
os.Remove(f.Name())
}
}()
fileInfo, err := file.Stat()
if err != nil {
log.Fatal(err)
}
var partSize int64 = 1024 * 1024 * 5
var totalSize int64 = fileInfo.Size()
var partCount int = int(math.Ceil(float64(totalSize) / float64(partSize)))
parts := make([]bos.PartSummary, 0, partCount)
for i := 0; i < partCount; i++ {
var skipBytes int64 = partSize * int64(i)
var size int64 = int64(math.Min(float64(totalSize-skipBytes), float64(partSize)))
tempFile, err := util.TempFile(nil, "", "")
files = append(files, tempFile)
if err != nil {
panic(err)
}
limitReader := io.LimitReader(file, size)
_, err = io.Copy(tempFile, limitReader)
if err != nil {
panic(err)
}
partNumber := i + 1
uploadPartRequest := bos.UploadPartRequest{
BucketName: bucketName,
ObjectKey: objectKey,
UploadId: uploadId,
PartSize: size,
PartNumber: partNumber,
PartData: tempFile,
}
parts = append(parts, bos.PartSummary{PartNumber: partNumber})
uploadPartResponse, err := bosClient.UploadPart(uploadPartRequest, nil)
if err != nil {
panic(err)
}
parts[partNumber-1].ETag = uploadPartResponse.GetETag()
}
completeMultipartUploadRequest := bos.CompleteMultipartUploadRequest{
BucketName: bucketName,
ObjectKey: objectKey,
UploadId: uploadId,
Parts: parts,
}
completeMultipartUploadResponse, err := bosClient.CompleteMultipartUpload(
completeMultipartUploadRequest, nil)
if err != nil {
panic(err)
}
fmt.Println(completeMultipartUploadResponse.ETag)
}
```
### MultipartUploadFromFile
```go
func MultipartUploadFromFile() {
bucketName := "baidubce-sdk-go"
objectKey := "examples/test-multipart-upload-from-file"
file, err := util.TempFileWithSize(1024 * 1024 * 10)
defer func() {
if file != nil {
file.Close()
os.Remove(file.Name())
}
}()
if err != nil {
log.Fatal(err)
}
var partSize int64 = 1024 * 1024 * 2
completeMultipartUploadResponse, err := bosClient.MultipartUploadFromFile(bucketName,
objectKey, file.Name(), partSize)
if err != nil {
log.Println(err)
} else {
fmt.Println(completeMultipartUploadResponse.ETag)
}
}
```
### GetSessionToken
```go
func GetSessionToken() {
req := bce.SessionTokenRequest{
DurationSeconds: 600,
AccessControlList: []bce.AccessControlListItem{
bce.AccessControlListItem{
Service: "bce:bos",
Region: "bj",
Effect: "Allow",
Resource: []string{"baidubce-sdk-go/*"},
Permission: []string{"READ"},
},
},
}
sessionTokenResponse, err := bceClient.GetSessionToken(req, nil)
if err != nil {
log.Println(err)
} else {
fmt.Println(sessionTokenResponse)
}
}
```
### putObjectBySTS
```go
func putObjectBySTS() {
bucketName := "baidubce-sdk-go"
objectKey := "examples/put-object-from-string.txt"
str := "Hello World 你好"
req := bce.SessionTokenRequest{
DurationSeconds: 600,
AccessControlList: []bce.AccessControlListItem{
bce.AccessControlListItem{
Service: "bce:bos",
Region: "bj",
Effect: "Allow",
Resource: []string{bucketName + "/*"},
Permission: []string{"READ", "WRITE"},
},
},
}
sessionTokenResponse, err := bosClient.GetSessionToken(req, nil)
if err != nil {
log.Println(err)
} else {
option := &bce.SignOption{
Credentials: bce.NewCredentials(sessionTokenResponse.AccessKeyId, sessionTokenResponse.SecretAccessKey),
Headers: map[string]string{"x-bce-security-token": sessionTokenResponse.SessionToken},
}
putObjectResponse, err := bosClient.PutObject(bucketName, objectKey, str, nil, option)
if err != nil {
log.Println(err)
} else {
fmt.Println(putObjectResponse.GetETag())
}
}
}
```
### Others
More api usages please refer
* [bos/client_test.go](bos/client_test.go)
* [baidubce-sdk-go-examples](https://github.com/guoyao/baidubce-sdk-go-examples)
## Authors
**Guoyao Wu**
+ [https://guoyao.me](https://guoyao.me)
+ [https://github.com/guoyao](https://github.com/guoyao)