123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- 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() Filed", zap.Any("err", openError.Error()))
- return "", "", errors.New("function file.Open() Filed, 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() Filed", zap.Any("err", putErr.Error()))
- return "", "", errors.New("function formUploader.Put() Filed, 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() Filed", zap.Any("err", err.Error()))
- return errors.New("function bucketManager.Delete() Filed, 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
- }
|