Files
2025-02-06 11:14:33 +08:00

361 lines
13 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package aliyunossservice
//
//import (
// "bytes"
// "encoding/base64"
// "fmt"
// "go-admin/config"
// "io"
// "mime/multipart"
// "path"
// "path/filepath"
// "strings"
// "sync"
// "time"
//
// "github.com/aliyun/aliyun-oss-go-sdk/oss"
// "github.com/google/uuid"
//)
//
//var (
// scheme = "https"
// clientPool = sync.Pool{}
// once sync.Once
//)
//
//// GetUuidFileName 获取随机文件名
//func GetUuidFileName() string {
// return strings.ReplaceAll(uuid.NewString(), "-", "")
//}
//
//func GetDomain() string {
// domain := strings.Join([]string{"https://", config.ExtConfig.ALYOssConfig.BucketName, ".", config.ExtConfig.ALYOssConfig.Endpoint}, "")
// return domain
//
//}
//
//// PublicUpload oss 公开图片文件上传
//func PublicUpload(fileName string, fileByte []byte) (url string, err error) {
// // 创建OSSClient实例
// client, err := oss.New(config.ExtConfig.ALYOssConfig.Endpoint, config.ExtConfig.ALYOssConfig.AccessKeyID, config.ExtConfig.ALYOssConfig.AccessKeySecret)
// if err != nil {
// return url, fmt.Errorf("oss init err: %w", err)
// }
//
// // 获取存储空间
// bucket, err := client.Bucket(config.ExtConfig.ALYOssConfig.BucketName)
// if err != nil {
// return url, fmt.Errorf("get bucket err: %w", err)
// }
//
// // 上传阿里云路径
// folderName := time.Now().Format("2006-01-02")
// if fileName == "" {
// fileName = fmt.Sprintf("%v.jpg", GetUuidFileName())
// }
// yunFileTmpPath := filepath.Join("uploads", folderName, "coin", fileName)
// // windows文件问题
// yunFileTmpPath = strings.ReplaceAll(yunFileTmpPath, "\\", "/")
//
// // 上传Byte数组
// option := oss.ContentType("image/jpg")
// err = bucket.PutObject(yunFileTmpPath, bytes.NewReader(fileByte), option)
// if err != nil {
// return url, fmt.Errorf("upload file err: %w", err)
// }
// domain := GetDomain()
// return domain + "/" + yunFileTmpPath, nil
//}
//
//// UploadVideoOSS 此方法可以用来上传各种类型的文件
//func UploadVideoOSS(file io.Reader, yunFileTmpPath string) (url string, err error) {
// // 创建OSSClient实例
// client, err := oss.New(config.ExtConfig.ALYOssConfig.Endpoint, config.ExtConfig.ALYOssConfig.AccessKeyID, config.ExtConfig.ALYOssConfig.AccessKeySecret)
// if err != nil {
// return url, fmt.Errorf("oss init err: %w", err)
// }
// // 获取存储空间
// bucket, err := client.Bucket(config.ExtConfig.ALYOssConfig.BucketName)
// if err != nil {
// return url, fmt.Errorf("get bucket err: %w", err)
// }
// //option := oss.ContentType("image/jpg") // 支持 jpg/png
// err = bucket.PutObject(yunFileTmpPath, file)
// if err != nil {
// return url, fmt.Errorf("upload file err: %w", err)
// }
// domain := GetDomain()
// return domain + "/" + yunFileTmpPath, nil
//
//}
//
//func PublicUpload1(file io.Reader) (url string, err error) {
// // 创建OSSClient实例
// client, err := oss.New(config.ExtConfig.ALYOssConfig.Endpoint, config.ExtConfig.ALYOssConfig.AccessKeyID, config.ExtConfig.ALYOssConfig.AccessKeySecret)
// if err != nil {
// return url, fmt.Errorf("oss init err: %w", err)
// }
//
// // 获取存储空间
// bucket, err := client.Bucket(config.ExtConfig.ALYOssConfig.BucketName)
// if err != nil {
// return url, fmt.Errorf("get bucket err: %w", err)
// }
//
// // 上传阿里云路径
// folderName := time.Now().Format("2006-01-02")
// yunFileTmpPath := filepath.Join("uploads", folderName, fmt.Sprintf("%v.jpg", GetUuidFileName()))
// // windows文件问题
// yunFileTmpPath = strings.ReplaceAll(yunFileTmpPath, "\\", "/")
//
// // 上传Byte数组
// option := oss.ContentType("image/jpg")
// err = bucket.PutObject(yunFileTmpPath, file, option)
// if err != nil {
// return url, fmt.Errorf("upload file err: %w", err)
// }
// domain := GetDomain()
// return domain + "/" + yunFileTmpPath, nil
//}
//
////// SecurityUpload 私有图片文件上传
////// TODO 该方法有问题待修改, 请勿使用
////func SecurityUpload(fileName string, fileByte []byte) (url string, err error) {
//// // 临时访问凭证
//// credentials, err := getSecurityToken()
//// if err != nil {
//// return url, fmt.Errorf("get security err: %w", err)
//// }
//// // 创建OSSClient实例
//// client, err := oss.New(config.ExtConfig.ALYOssConfig.Endpoint, credentials.AccessKeyId, credentials.AccessKeySecret, oss.SecurityToken(credentials.SecurityToken))
//// if err != nil {
//// return url, fmt.Errorf("create oss virtual client err: %w", err)
//// }
//// // 获取存储空间
//// bucket, err := client.Bucket(config.ExtConfig.ALYOssConfig.BucketName)
//// if err != nil {
//// return url, fmt.Errorf("get bucket err: %w", err)
//// }
//// // 上传阿里云路径
//// folderName := time.Now().Format("2006-01-02")
//// yunFileTmpPath := filepath.Join("uploads", folderName, fmt.Sprintf("f%v_%v.jpg", fileName, GetUuidFileName()))
//// // windows文件问题
//// yunFileTmpPath = strings.ReplaceAll(yunFileTmpPath, "\\", "/")
//// // 带可选参数的签名直传
//// options := []oss.Option{
//// oss.ContentType("image/jpg"),
//// }
//// err = bucket.PutObject(yunFileTmpPath, bytes.NewReader(fileByte), options...)
//// if err != nil {
//// return url, fmt.Errorf("upload file err: %w", err)
//// }
//// signedGetURL, err := bucket.SignURL(yunFileTmpPath, oss.HTTPGet, utility.StringAsInt64(config.ExtConfig.ALYOssConfig.ExpiredInSec))
//// if err != nil {
//// return url, fmt.Errorf("get sign url err: %w", err)
//// }
//// return signedGetURL, nil
////}
////func GetSecurityURL(fileName string) (url string, err error) {
//// // 临时访问凭证
//// credentials, err := getSecurityToken()
//// if err != nil {
//// return url, fmt.Errorf("get security err: %w", err)
//// }
//// // 创建OSSClient实例
//// client, err := oss.New(config.ExtConfig.ALYOssConfig.Endpoint, credentials.AccessKeyId, credentials.AccessKeySecret, oss.SecurityToken(credentials.SecurityToken))
//// // client, err := oss.New(appconfig.ExtConfig.ALYOssConfig.Endpoint, appconfig.ExtConfig.ALYOssConfig.AccessKeyID, appconfig.ExtConfig.ALYOssConfig.AccessKeySecret, oss.SecurityToken(credentials.SecurityToken))
//// if err != nil {
//// return url, fmt.Errorf("create oss virtual client err: %w", err)
//// }
//// // 获取存储空间
//// bucket, err := client.Bucket(config.ExtConfig.ALYOssConfig.BucketName)
//// if err != nil {
//// return url, fmt.Errorf("get bucket err: %w", err)
//// }
//// // 上传阿里云路径
//// folderName := time.Now().Format("2006-01-02")
//// yunFileTmpPath := filepath.Join("uploads", folderName, fileName)
//// // windows文件问题
//// yunFileTmpPath = strings.ReplaceAll(yunFileTmpPath, "\\", "/")
//// // 带可选参数的签名直传
//// fmt.Println("fdfasfsdfasfsdf", yunFileTmpPath)
//// signedGetURL, err := bucket.SignURL(yunFileTmpPath, oss.HTTPGet, utility.StringAsInt64(config.ExtConfig.ALYOssConfig.ExpiredInSec))
//// if err != nil {
//// return url, fmt.Errorf("get sign url err: %w", err)
//// }
//// return signedGetURL, nil
////}
////func getSecurityToken() (credentials sts.Credentials, er error) {
//// // 构建一个阿里云客户端, 用于发起请求。
//// // 构建阿里云客户端时需要设置AccessKey ID和AccessKey Secret。
//// client, err := sts.NewClientWithAccessKey(config.ExtConfig.ALYOssConfig.RegionId, config.ExtConfig.ALYOssConfig.AccessKeyID, config.ExtConfig.ALYOssConfig.AccessKeySecret)
//// if err != nil {
//// return credentials, fmt.Errorf("get credentials err: %w", err)
//// }
//// // 构建请求对象。
//// request := sts.CreateAssumeRoleRequest()
//// // 设置参数。关于参数含义和设置方法请参见《API参考》。
//// request.Scheme = scheme
//// request.RoleArn = config.ExtConfig.ALYOssConfig.RoleArn
//// request.RoleSessionName = config.ExtConfig.ALYOssConfig.RoleSessionName
////
//// // 发起请求,并得到响应。
//// response, err := client.AssumeRole(request)
//// if err != nil {
//// loghelper.Error("get assume role err", zap.Error(err))
//// return credentials, fmt.Errorf("get assume role err: %w", err)
//// }
//// return response.Credentials, nil
////}
//
//type UploadByBase64 struct {
// Images string `json:"images" validate:"required"`
// FileName string `json:"fileName"` // 文件名称包含文件类型
//}
//
//// UploadByString @name 上传文件-字符串
//func UploadByString(params UploadByBase64) (url string, err error) {
// // 获取文件名称
// if params.FileName == "" {
// // 获取上传文件类型
// fileTypePosition := strings.Index(params.Images, "/")
// fileType := params.Images[fileTypePosition+1 : fileTypePosition+5]
// uid := uuid.NewString()
// params.FileName = uid + "." + fileType // 代码生成图片名称
// }
// filePath := fmt.Sprintf("%v/%v", time.Now().Format("2006-01-02"), params.FileName)
// uploadPath := filepath.Join("uploads", filePath) // 生成oos图片存储路径
//
// // 获取图片内容并base64解密
// fileContentPosition := strings.Index(params.Images, ",")
// uploadBaseString := params.Images[fileContentPosition+1:]
// uploadString, _ := base64.StdEncoding.DecodeString(uploadBaseString)
//
// // 创建OSSClient实例
// client, err := oss.New(config.ExtConfig.ALYOssConfig.Endpoint, config.ExtConfig.ALYOssConfig.AccessKeyID, config.ExtConfig.ALYOssConfig.AccessKeySecret)
// if err != nil {
// return url, fmt.Errorf("create oss client err: %w", err)
// }
//
// // 获取存储空间
// bucket, err := client.Bucket(config.ExtConfig.ALYOssConfig.BucketName)
// if err != nil {
// return url, fmt.Errorf("get bucket err: %w", err)
// }
// option := oss.ContentType("image/jpg")
// err = bucket.PutObject(uploadPath, strings.NewReader(string(uploadString)), option)
// if err != nil {
// return url, fmt.Errorf("put object err: %w", err)
// }
// domain := GetDomain()
// return domain + "/" + uploadPath, nil
//}
//
//// 从连接池中获取客户端实例
//func getClient() (*oss.Client, error) {
// once.Do(func() {
// clientPool.New = func() interface{} {
// if config.ExtConfig.ALYOssConfig.Endpoint == `` || config.ExtConfig.ALYOssConfig.AccessKeyID == `` || config.ExtConfig.ALYOssConfig.AccessKeySecret == `` {
// return fmt.Errorf("阿里云oss配置错误")
// }
// client, err := oss.New(config.ExtConfig.ALYOssConfig.Endpoint, config.ExtConfig.ALYOssConfig.AccessKeyID, config.ExtConfig.ALYOssConfig.AccessKeySecret)
// if err != nil {
// return fmt.Errorf("oss init err: %w", err)
// }
// return client
// }
// })
// poolObj := clientPool.Get()
// client, ok := poolObj.(*oss.Client)
// if !ok {
// err, ok := poolObj.(error)
// if ok {
// return nil, err
// }
// return nil, fmt.Errorf("getClient err: %v", poolObj)
// }
// return client, nil
//}
//
//// 将实例放回
//func putClient(x *oss.Client) {
// clientPool.Put(x)
//}
//
//// UploadFromFileHeader 通过multipart.FileHeader上传文件
//func UploadFromFileHeader(fileType string, file *multipart.FileHeader) (url string, err error) {
// fileReader, err := file.Open()
// if err != nil {
// return url, err
// }
// filePath := getPath("uploads/"+fileType, path.Ext(file.Filename))
//
// return Upload(fileReader, filePath, oss.ContentType("image/jpg"))
//}
//
//// getPath 通过路径和文件名后缀获取上传阿里云路径
//func getPath(filePath, ext string) (resPath string) {
// resPath = path.Join(filePath, time.Now().Format("2006-01-02"), fmt.Sprintf("%v.%s", GetUuidFileName(), ext))
// // windows文件问题
// resPath = strings.ReplaceAll(resPath, "\\", "/")
// return resPath
//}
//
//// deUrl 解开url到阿里云路径 用于删除对象
//func deUrl(url string) (resPath string) {
// return strings.Replace(url, "https://"+config.ExtConfig.ALYOssConfig.BucketName+"."+config.ExtConfig.ALYOssConfig.Endpoint+"/", ``, 1)
//}
//
//// enUrl 合成url
//func enUrl(path string) (resPath string) {
// return "https://" + config.ExtConfig.ALYOssConfig.BucketName + "." + config.ExtConfig.ALYOssConfig.Endpoint + "/" + path
//}
//
//// Upload 指定 file文件, path 存储路径 options 配置选项
//func Upload(file io.Reader, path string, options ...oss.Option) (url string, err error) {
// // 创建OSSClient实例
// client, err := getClient()
// if err != nil {
// return url, err
// }
// defer putClient(client)
//
// // 获取存储空间
// bucket, err := client.Bucket(config.ExtConfig.ALYOssConfig.BucketName)
// if err != nil {
// return url, fmt.Errorf("get bucket err: %w", err)
// }
//
// // 上传Byte数组
// err = bucket.PutObject(path, file, options...)
// if err != nil {
// return url, fmt.Errorf("upload file err: %w", err)
// }
// url = enUrl(path)
// return
//}
//
//// Delete 删除对象
//func Delete(filePath string) (err error) {
// // 创建OSSClient实例
// client, err := getClient()
// if err != nil {
// return err
// }
// defer putClient(client)
//
// // 获取存储空间
// bucket, err := client.Bucket(config.ExtConfig.ALYOssConfig.BucketName)
// if err != nil {
// return fmt.Errorf("get bucket err: %w", err)
// }
//
// // 删除
// err = bucket.DeleteObject(deUrl(filePath))
// if err != nil {
// return fmt.Errorf("upload file err: %w", err)
// }
// return
//}