123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- package entity
- import (
- "crypto/rand"
- "crypto/sha256"
- "fmt"
- "io"
- "math/big"
- "net/url"
- "os"
- "path/filepath"
- "app.yhyue.com/moapp/jybase/common"
- "github.com/aliyun/aliyun-oss-go-sdk/oss"
- "github.com/gogf/gf/v2/util/gconv"
- "github.com/zeromicro/go-zero/core/logx"
- )
- var Ossclient *oss.Client
- func OssInit(ossEndpoint, ossAccessKeyID, ossAccessKeySecret string) {
- client, err := oss.New(ossEndpoint, ossAccessKeyID, ossAccessKeySecret)
- if err != nil {
- logx.Error("Error:", err)
- os.Exit(-1)
- }
- Ossclient = client
- }
- // OssPutObject oss附件上传
- func OssPutObject(objectName string, fd io.Reader, ossBucketName string) (bool, error) {
- defer common.Catch()
- // 获取存储空间。
- bucket, err := Ossclient.Bucket(ossBucketName)
- if err != nil {
- logx.Error("Error:", err)
- return false, err
- }
- fileNameOnly := GetFileNameOnly(objectName)
- fileExtension := TypeByExt(objectName)
- option := []oss.Option{
- // oss.ContentDisposition("attachment;filename=" + objectName),
- oss.ContentDisposition("attachment;filename=" + fileNameOnly + "." + fileExtension + ";filename*=UTF-8''" + url.QueryEscape(fileNameOnly) + "." + fileExtension),
- oss.ContentType("application/octet-stream"),
- oss.ACReqHeaders("Access-Control-Allow-Origin"),
- oss.ACReqMethod("*"),
- }
- // 上传文件流。 文件超过1M 上传时间超时(发现是受控制台日志打印影响,现已把日志单独处理,注释协程)
- err = bucket.PutObject(objectName, fd, option...)
- if err != nil {
- logx.Error("file upload false:", err)
- return false, err
- }
- return true, nil
- }
- //删除附件
- func OssDelObject(objectName, ossBucketName string) (bool, error) {
- defer common.Catch()
- // 获取存储信息
- bucket, err := Ossclient.Bucket(ossBucketName)
- if err != nil {
- logx.Error("Error:", err)
- return false, err
- }
- //附件是否存在 存在再删除
- if ok, _ := bucket.IsObjectExist(objectName); !ok {
- err = bucket.DeleteObject(objectName)
- if err != nil {
- logx.Error("file del false:", err)
- return false, err
- }
- }
- return true, err
- }
- func GetHashKey(bs []byte) string {
- defer common.Catch()
- ha := sha256.New()
- ha.Write(bs)
- hbs := ha.Sum(nil)
- key := fmt.Sprintf("%x", hbs)
- return key
- }
- func TypeByExt(path string) string {
- for i := len(path) - 1; i >= 0 && path[i] != '/'; i-- {
- if path[i] == '.' {
- return path[i:]
- }
- }
- return ""
- }
- //GetFileNameOnly 获取文件名称(不带后缀)
- func GetFileNameOnly(filename string) string {
- extension := filepath.Ext(filename)
- fileNameOnly := filename[0 : len(filename)-len(extension)]
- return fileNameOnly
- }
- //GetRando 获取随机数
- func GetRando() string {
- randomNumber, err := rand.Int(rand.Reader, big.NewInt(90))
- if err != nil {
- return "00"
- }
- return gconv.String(randomNumber.Int64() + 10)
- }
|