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.
73 lines
1.4 KiB
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
|
|
|
|
}
|