Files
2025-05-12 22:14:52 +08:00

105 lines
2.3 KiB
Go

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
}