1
This commit is contained in:
360
common/service/sysservice/aliyunossservice/oss.go
Normal file
360
common/service/sysservice/aliyunossservice/oss.go
Normal file
@ -0,0 +1,360 @@
|
||||
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
|
||||
//}
|
||||
Reference in New Issue
Block a user