qiniu.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package upload
  2. import (
  3. "context"
  4. "errors"
  5. "fmt"
  6. "gin-vue-admin/global"
  7. "github.com/qiniu/api.v7/v7/auth/qbox"
  8. "github.com/qiniu/api.v7/v7/storage"
  9. "go.uber.org/zap"
  10. "mime/multipart"
  11. "time"
  12. )
  13. type Qiniu struct{}
  14. // 接收两个参数 一个文件流 一个 bucket 你的七牛云标准空间的名字
  15. func (*Qiniu) Upload(file *multipart.FileHeader) (string, string, error) {
  16. putPolicy := storage.PutPolicy{Scope: global.GVA_CONFIG.Qiniu.Bucket}
  17. mac := qbox.NewMac(global.GVA_CONFIG.Qiniu.AccessKey, global.GVA_CONFIG.Qiniu.SecretKey)
  18. upToken := putPolicy.UploadToken(mac)
  19. cfg := qiniuConfig()
  20. formUploader := storage.NewFormUploader(cfg)
  21. ret := storage.PutRet{}
  22. putExtra := storage.PutExtra{Params: map[string]string{"x:name": "github logo"}}
  23. f, openError := file.Open()
  24. if openError != nil {
  25. global.GVA_LOG.Error("function file.Open() Filed", zap.Any("err", openError.Error()))
  26. return "", "", errors.New("function file.Open() Filed, err:" + openError.Error())
  27. }
  28. fileKey := fmt.Sprintf("%d%s", time.Now().Unix(), file.Filename) // 文件名格式 自己可以改 建议保证唯一性
  29. putErr := formUploader.Put(context.Background(), &ret, upToken, fileKey, f, file.Size, &putExtra)
  30. if putErr != nil {
  31. global.GVA_LOG.Error("function formUploader.Put() Filed", zap.Any("err", putErr.Error()))
  32. return "", "", errors.New("function formUploader.Put() Filed, err:" + putErr.Error())
  33. }
  34. return global.GVA_CONFIG.Qiniu.ImgPath + "/" + ret.Key, ret.Key, nil
  35. }
  36. func (*Qiniu) DeleteFile(key string) error {
  37. mac := qbox.NewMac(global.GVA_CONFIG.Qiniu.AccessKey, global.GVA_CONFIG.Qiniu.SecretKey)
  38. cfg := qiniuConfig()
  39. bucketManager := storage.NewBucketManager(mac, cfg)
  40. if err := bucketManager.Delete(global.GVA_CONFIG.Qiniu.Bucket, key); err != nil{
  41. global.GVA_LOG.Error("function bucketManager.Delete() Filed", zap.Any("err", err.Error()))
  42. return errors.New("function bucketManager.Delete() Filed, err:" + err.Error())
  43. }
  44. return nil
  45. }
  46. // config 根据配置文件进行返回七牛云的配置
  47. func qiniuConfig() *storage.Config {
  48. cfg := storage.Config{
  49. UseHTTPS: global.GVA_CONFIG.Qiniu.UseHTTPS,
  50. UseCdnDomains: global.GVA_CONFIG.Qiniu.UseCdnDomains,
  51. }
  52. switch global.GVA_CONFIG.Qiniu.Zone { // 根据配置文件进行初始化空间对应的机房
  53. case "ZoneHuadong":
  54. cfg.Zone = &storage.ZoneHuadong
  55. case "ZoneHuabei":
  56. cfg.Zone = &storage.ZoneHuabei
  57. case "ZoneHuanan":
  58. cfg.Zone = &storage.ZoneHuanan
  59. case "ZoneBeimei":
  60. cfg.Zone = &storage.ZoneBeimei
  61. case "ZoneXinjiapo":
  62. cfg.Zone = &storage.ZoneXinjiapo
  63. }
  64. return &cfg
  65. }