tencent.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/os/gfile"
  7. "github.com/gogf/gf/v2/os/gtime"
  8. "github.com/gogf/gf/v2/util/grand"
  9. "github.com/tencentyun/cos-go-sdk-v5"
  10. "github.com/tencentyun/cos-go-sdk-v5/debug"
  11. "github.com/tiger1103/gfast/v3/api/v1/system"
  12. "io"
  13. "net/http"
  14. "net/url"
  15. "strconv"
  16. "strings"
  17. )
  18. type Tencent struct {
  19. }
  20. func (s *Tencent) Upload(ctx context.Context, file *ghttp.UploadFile) (result system.UploadResponse, err error) {
  21. v, err := g.Cfg().Get(ctx, "upload.tencentCOS")
  22. if err != nil {
  23. return
  24. }
  25. m := v.MapStrVar()
  26. var (
  27. upPath = m["upPath"].String()
  28. rawUrl = m["rawUrl"].String()
  29. secretID = m["secretID"].String()
  30. secretKey = m["secretKey"].String()
  31. )
  32. name := gfile.Basename(file.Filename)
  33. name = strings.ToLower(strconv.FormatInt(gtime.TimestampNano(), 36) + grand.S(6))
  34. name = name + gfile.Ext(file.Filename)
  35. path := upPath + name
  36. url, _ := url.Parse(rawUrl)
  37. b := &cos.BaseURL{BucketURL: url}
  38. client := cos.NewClient(b, &http.Client{
  39. Transport: &cos.AuthorizationTransport{
  40. SecretID: secretID,
  41. SecretKey: secretKey,
  42. Transport: &debug.DebugRequestTransport{
  43. RequestHeader: false,
  44. RequestBody: false,
  45. ResponseHeader: false,
  46. ResponseBody: false,
  47. },
  48. },
  49. })
  50. opt := &cos.ObjectPutOptions{
  51. ObjectPutHeaderOptions: &cos.ObjectPutHeaderOptions{
  52. ContentLength: int64(file.Size),
  53. },
  54. }
  55. var f io.ReadCloser
  56. f, err = file.Open()
  57. if err != nil {
  58. return
  59. }
  60. defer f.Close()
  61. _, err = client.Object.Put(context.Background(), path, f, opt)
  62. result = system.UploadResponse{
  63. Size: file.Size,
  64. Path: rawUrl + path,
  65. FullPath: rawUrl + path,
  66. Name: file.Filename,
  67. Type: file.Header.Get("Content-type"),
  68. }
  69. return
  70. }