You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tool/services/oss/aliyun.go

73 lines
1.4 KiB

package oss
import (
"bytes"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
"log"
"os"
)
type Aliyun struct {
EndPoint string
AccessId string
AccessSecret string
BucketName string
ossClient *oss.Client
}
func (a *Aliyun) getClient() (*oss.Client, error) {
if len(a.EndPoint) == 0 {
a.EndPoint = os.Getenv("ALIYUN_OSS_ENDPOINT")
}
if len(a.AccessId) == 0 {
a.AccessId = os.Getenv("ALIYUN_OSS_ACCESS_ID")
}
if len(a.AccessSecret) == 0 {
a.AccessSecret = os.Getenv("ALIYUN_OSS_ACCESS_SECRET")
}
if len(a.BucketName) == 0 {
a.BucketName = os.Getenv("ALIYUN_OSS_BUCKET_NAME")
}
return oss.New(a.EndPoint, a.AccessId, a.AccessSecret)
}
func (a *Aliyun) Upload(file []byte, filename string) (string, error) {
if a.ossClient == nil {
client, err := a.getClient()
if err != nil {
return "", err
}
a.ossClient = client
}
exists, err := a.ossClient.IsBucketExist(a.BucketName)
if err != nil {
return "", err
}
if !exists {
log.Printf("bucket %s not exists, create it\n", a.BucketName)
err = a.ossClient.CreateBucket(a.BucketName)
if err != nil {
return "", err
}
}
var bucket *oss.Bucket
bucket, err = a.ossClient.Bucket(a.BucketName)
if err != nil {
log.Printf("get bucket %s failed\n", a.BucketName)
return "", err
}
err = bucket.PutObject(filename, bytes.NewReader(file))
if err != nil {
return "", err
}
return filename, nil
}