wangpengfei
2023-08-24 487b20629178159396a93460f7355f5ebee7a8a0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
package upload
 
import (
    "context"
    "errors"
    "fmt"
    "mime/multipart"
    "time"
 
    "github.com/flipped-aurora/gin-vue-admin/server/global"
    "github.com/qiniu/api.v7/v7/auth/qbox"
    "github.com/qiniu/api.v7/v7/storage"
    "go.uber.org/zap"
)
 
type Qiniu struct{}
 
//@author: [piexlmax](https://github.com/piexlmax)
//@author: [ccfish86](https://github.com/ccfish86)
//@author: [SliverHorn](https://github.com/SliverHorn)
//@object: *Qiniu
//@function: UploadFile
//@description: 上传文件
//@param: file *multipart.FileHeader
//@return: string, string, error
 
func (*Qiniu) UploadFile(file *multipart.FileHeader) (string, string, error) {
    putPolicy := storage.PutPolicy{Scope: global.GVA_CONFIG.Qiniu.Bucket}
    mac := qbox.NewMac(global.GVA_CONFIG.Qiniu.AccessKey, global.GVA_CONFIG.Qiniu.SecretKey)
    upToken := putPolicy.UploadToken(mac)
    cfg := qiniuConfig()
    formUploader := storage.NewFormUploader(cfg)
    ret := storage.PutRet{}
    putExtra := storage.PutExtra{Params: map[string]string{"x:name": "github logo"}}
 
    f, openError := file.Open()
    if openError != nil {
        global.GVA_LOG.Error("function file.Open() failed", zap.Any("err", openError.Error()))
 
        return "", "", errors.New("function file.Open() failed, err:" + openError.Error())
    }
    defer f.Close()                                                  // 创建文件 defer 关闭
    fileKey := fmt.Sprintf("%d%s", time.Now().Unix(), file.Filename) // 文件名格式 自己可以改 建议保证唯一性
    putErr := formUploader.Put(context.Background(), &ret, upToken, fileKey, f, file.Size, &putExtra)
    if putErr != nil {
        global.GVA_LOG.Error("function formUploader.Put() failed", zap.Any("err", putErr.Error()))
        return "", "", errors.New("function formUploader.Put() failed, err:" + putErr.Error())
    }
    return global.GVA_CONFIG.Qiniu.ImgPath + "/" + ret.Key, ret.Key, nil
}
 
//@author: [piexlmax](https://github.com/piexlmax)
//@author: [ccfish86](https://github.com/ccfish86)
//@author: [SliverHorn](https://github.com/SliverHorn)
//@object: *Qiniu
//@function: DeleteFile
//@description: 删除文件
//@param: key string
//@return: error
 
func (*Qiniu) DeleteFile(key string) error {
    mac := qbox.NewMac(global.GVA_CONFIG.Qiniu.AccessKey, global.GVA_CONFIG.Qiniu.SecretKey)
    cfg := qiniuConfig()
    bucketManager := storage.NewBucketManager(mac, cfg)
    if err := bucketManager.Delete(global.GVA_CONFIG.Qiniu.Bucket, key); err != nil {
        global.GVA_LOG.Error("function bucketManager.Delete() failed", zap.Any("err", err.Error()))
        return errors.New("function bucketManager.Delete() failed, err:" + err.Error())
    }
    return nil
}
 
//@author: [SliverHorn](https://github.com/SliverHorn)
//@object: *Qiniu
//@function: qiniuConfig
//@description: 根据配置文件进行返回七牛云的配置
//@return: *storage.Config
 
func qiniuConfig() *storage.Config {
    cfg := storage.Config{
        UseHTTPS:      global.GVA_CONFIG.Qiniu.UseHTTPS,
        UseCdnDomains: global.GVA_CONFIG.Qiniu.UseCdnDomains,
    }
    switch global.GVA_CONFIG.Qiniu.Zone { // 根据配置文件进行初始化空间对应的机房
    case "ZoneHuadong":
        cfg.Zone = &storage.ZoneHuadong
    case "ZoneHuabei":
        cfg.Zone = &storage.ZoneHuabei
    case "ZoneHuanan":
        cfg.Zone = &storage.ZoneHuanan
    case "ZoneBeimei":
        cfg.Zone = &storage.ZoneBeimei
    case "ZoneXinjiapo":
        cfg.Zone = &storage.ZoneXinjiapo
    }
    return &cfg
}