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 }