package ossx import ( "bytes" "errors" "strings" "github.com/aliyun/aliyun-oss-go-sdk/oss" ) type Ossx struct { endPoint string accessKeyId string accessKeySecret string bucketName string client *oss.Client bucket *oss.Bucket } func NewOssx(endPoint string, accessKeyId string, accessKeySecret string, bucketName string) (*Ossx, error) { client, err := oss.New(endPoint, accessKeyId, accessKeySecret) if err != nil { return nil, err } bucket, err := client.Bucket(bucketName) if err != nil { return nil, err } return &Ossx{ endPoint: endPoint, accessKeyId: accessKeyId, accessKeySecret: accessKeySecret, bucketName: bucketName, client: client, bucket: bucket, }, nil } // 上传文件 func (l *Ossx) UploadByPath(objectKey string, filePath string) error { // 替换 objectKey = strings.ReplaceAll(objectKey, `\`, `/`) err := l.bucket.PutObjectFromFile(objectKey, filePath) if err != nil { return err } return nil } // 下载文件 func (l *Ossx) GetObjectToByte(objectKey string) ([]byte, error) { // 替换 objectKey = strings.ReplaceAll(objectKey, `\`, `/`) body, err := l.bucket.GetObject(objectKey) if err != nil { return nil, err } defer body.Close() buf := new(bytes.Buffer) buf.ReadFrom(body) return buf.Bytes(), nil } // 分片上传 func (l *Ossx) UploadByPathMultipart(objectKey string, filePath string) error { // 替换 objectKey = strings.ReplaceAll(objectKey, `\`, `/`) // 分片上传 err := l.bucket.UploadFile(objectKey, filePath, 100*1024, oss.Routines(3)) if err != nil { return err } return nil } // 上传文件 func (l *Ossx) UploadByByte(objectKey string, body []byte) error { objectKey = strings.ReplaceAll(objectKey, `\`, `/`) return l.bucket.PutObject(objectKey, strings.NewReader(string(body))) } // 获取远端MD5 func (l *Ossx) GetObjectMd5(objectKey string) (string, error) { props, err := l.bucket.GetObjectDetailedMeta(objectKey) if err != nil { return "", err } etag := props.Values("Etag") if len(etag) == 0 { return "", errors.New("获取远端md5错误") } remoteMd5 := strings.Trim(etag[0], `"`) return remoteMd5, nil }