qiniou.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package upload
  2. import (
  3. "context"
  4. "github.com/gogf/gf/v2/frame/g"
  5. "github.com/gogf/gf/v2/net/ghttp"
  6. "github.com/gogf/gf/v2/util/guid"
  7. "github.com/qiniu/go-sdk/v7/auth/qbox"
  8. "github.com/qiniu/go-sdk/v7/storage"
  9. "github.com/tiger1103/gfast/v3/api/v1/system"
  10. "path"
  11. )
  12. type Qiniou struct{}
  13. func (s *Qiniou) Upload(ctx context.Context, file *ghttp.UploadFile) (result system.UploadResponse, err error) {
  14. url, err := s.toQiniou(ctx, file)
  15. if err != nil {
  16. return
  17. }
  18. result = system.UploadResponse{
  19. Size: file.Size,
  20. Path: url,
  21. FullPath: url,
  22. Name: file.Filename,
  23. Type: file.Header.Get("Content-type"),
  24. }
  25. return
  26. }
  27. func (s *Qiniou) toQiniou(ctx context.Context, f *ghttp.UploadFile) (url string, err error) {
  28. file, err := f.Open()
  29. if err != nil {
  30. return
  31. }
  32. defer file.Close()
  33. v, err := g.Cfg().Get(ctx, "upload.qiniou")
  34. if err != nil {
  35. return
  36. }
  37. m := v.MapStrVar()
  38. var AccessKey = m["accessKey"].String()
  39. var SerectKey = m["sercetKey"].String()
  40. var Bucket = m["bucket"].String()
  41. var ImgUrl = m["qiniuServer"].String()
  42. putPlicy := storage.PutPolicy{
  43. Scope: Bucket,
  44. }
  45. mac := qbox.NewMac(AccessKey, SerectKey)
  46. upToken := putPlicy.UploadToken(mac)
  47. cfg := storage.Config{
  48. Zone: &storage.ZoneHuanan,
  49. UseCdnDomains: false,
  50. UseHTTPS: false,
  51. }
  52. putExtra := storage.PutExtra{
  53. MimeType: f.Header.Get("Content-type"),
  54. }
  55. formUploader := storage.NewFormUploader(&cfg)
  56. ret := storage.PutRet{}
  57. filename := guid.S() + path.Ext(f.Filename)
  58. fileSize := f.Size
  59. //err = formUploader.PutWithoutKey(context.Background(), &ret, upToken, file, fileSize, &putExtra)
  60. err = formUploader.Put(context.Background(), &ret, upToken, filename, file, fileSize, &putExtra)
  61. if err != nil {
  62. return
  63. }
  64. url = ImgUrl + "/" + filename
  65. return url, nil
  66. }