Rainbond/builder/cloudos/alioss.go
2019-11-05 11:32:55 +08:00

79 lines
1.7 KiB
Go

package cloudos
import (
"fmt"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
type aliOSS struct {
*oss.Client
*Config
}
func newAliOSS(cfg *Config) (CloudOSer, error) {
client, err := oss.New(cfg.Endpoint, cfg.AccessKey, cfg.SecretKey)
if err != nil {
return nil, err
}
return &aliOSS{Client: client, Config: cfg}, nil
}
func (a *aliOSS) PutObject(okey, filepath string) error {
// verify if bucket exists and you have permission to access it.
_, err := a.GetBucketStat(a.BucketName)
if err != nil {
svcErr, ok := err.(oss.ServiceError)
if !ok {
return err
}
return svcErrToS3SDKError(svcErr)
}
bucket, err := a.Bucket(a.BucketName)
if err != nil {
return fmt.Errorf("failed to gets the bucket instance: %v", err)
}
err = bucket.PutObjectFromFile(okey, filepath)
if err != nil {
return fmt.Errorf("failed to put object: %v", err)
}
return err
}
func (a *aliOSS) GetObject(objectKey, filePath string) error {
bucket, err := a.Bucket(a.BucketName)
if err != nil {
return fmt.Errorf("failed to gets the bucket instance: %v", err)
}
err = bucket.GetObjectToFile(objectKey, filePath)
if err != nil {
svcErr, ok := err.(oss.ServiceError)
if !ok {
return err
}
return svcErrToS3SDKError(svcErr)
}
return nil
}
func (a *aliOSS) DeleteObject(objkey string) error {
bucket, err := a.Bucket(a.BucketName)
if err != nil {
return fmt.Errorf("failed to gets the bucket instance: %v", err)
}
return bucket.DeleteObject(objkey)
}
func svcErrToS3SDKError(svcErr oss.ServiceError) S3SDKError {
return S3SDKError{
Code: svcErr.Code,
Message: svcErr.Message,
RawMessage: svcErr.RawMessage,
StatusCode: svcErr.StatusCode,
}
}