优化oss的使用

This commit is contained in:
Yun
2024-01-31 16:36:35 +08:00
parent 447f61023d
commit 93512839d5
3 changed files with 191 additions and 45 deletions
+85 -45
View File
@@ -1,64 +1,104 @@
package ossx
import (
"crypto/md5"
"encoding/hex"
"bytes"
"errors"
"go_mysqldump/global"
"io"
"os"
"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 Upload(objectKey string, filePath string) error {
func (l *ossx) UploadByPath(objectKey string, filePath string) error {
// 替换
objectKey = strings.ReplaceAll(objectKey, `\`, `/`)
// fmt.Println("objectKey:", objectKey, " filePath:", filePath)
client, err := oss.New(global.Config.Oss.Endpoint, global.Config.Oss.AccessKeyID, global.Config.Oss.AccessKeySecret)
err := l.bucket.PutObjectFromFile(objectKey, filePath)
if err != nil {
return err
}
bucket, err := client.Bucket(global.Config.Oss.BucketName)
if err != nil {
return err
}
err = bucket.PutObjectFromFile(objectKey, filePath)
if err != nil {
return err
}
props, err := 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], `"`)
// fmt.Println("remoteMd5", remoteMd5)
file, err := os.Open(filePath)
if err != nil {
return err
}
defer file.Close()
hash := md5.New()
io.Copy(hash, file)
localMd5 := strings.ToUpper(hex.EncodeToString(hash.Sum(nil)))
if remoteMd5 != localMd5 {
return errors.New("md5")
}
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
}