劲创营---任务项目
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 

106 行
3.2 KiB

  1. package svc
  2. import (
  3. "fmt"
  4. "strings"
  5. "applet/app/comm/e"
  6. "applet/app/comm/md"
  7. "applet/app/comm/utils"
  8. "applet/app/comm/utils/logx"
  9. "applet/app/lib/qiniu"
  10. "github.com/gin-gonic/gin"
  11. )
  12. // 请求文件上传
  13. func ImgReqUpload(c *gin.Context, uid, dirName, fname, callbackUrl string, fsize int64) (interface{}, error) {
  14. ext := utils.FileExt(fname)
  15. if err := initStg(c, fsize, ext); err != nil {
  16. return nil, err
  17. }
  18. ex := strings.Split(fname, ".")
  19. fmt.Println(ex)
  20. fileType := ""
  21. if len(ex) > 1 {
  22. fileType = ex[len(ex)-1]
  23. }
  24. if dirName == "" {
  25. dirName = "任务"
  26. }
  27. newName := c.GetString("mid") + "/" + dirName + "/" + strings.ReplaceAll(fname, "."+fileType, "")
  28. newName += "_" + utils.RandString(4, "0123456789")
  29. newName += "." + fileType // 因为可能存在多种图像格式,这里统一后缀为png
  30. f := &md.FileCallback{
  31. Uid: uid,
  32. FileName: newName,
  33. }
  34. // logx.Warn(f.Uid)
  35. return qiniu.ReqImgUpload(f, callbackUrl), nil
  36. }
  37. func initStg(c *gin.Context, fsize int64, ext string) error {
  38. // 获取上传配置
  39. stgInfo := SysCfgFind(
  40. c,
  41. md.KEY_CFG_FILE_BUCKET,
  42. md.KEY_CFG_FILE_HOST,
  43. md.KEY_CFG_FILE_AK,
  44. md.KEY_CFG_FILE_SK,
  45. md.KEY_CFG_FILE_PVD,
  46. md.KEY_CFG_FILE_REGION,
  47. md.KEY_CFG_FILE_MAX_SIZE,
  48. md.KEY_CFG_FILE_EXT,
  49. md.KEY_CFG_FILE_SCHEME,
  50. md.KEY_CFG_FILE_AVATAR_THUMBNAIL,
  51. )
  52. //?imageView2/1/w/120/h/120/format/webp/interlace/1
  53. if stgInfo == nil {
  54. return e.NewErrCode(e.ERR_CFG)
  55. }
  56. // todo 目前仅支持七牛
  57. if v, ok := stgInfo[md.KEY_CFG_FILE_PVD]; !ok || v != "qiniu" {
  58. return e.NewErrCode(e.ERR_CFG)
  59. }
  60. if v, ok := stgInfo[md.KEY_CFG_FILE_REGION]; !ok || v == "" {
  61. return e.NewErrCode(e.ERR_CFG)
  62. }
  63. if v, ok := stgInfo[md.KEY_CFG_FILE_AK]; !ok || v == "" {
  64. return e.NewErrCode(e.ERR_CFG)
  65. }
  66. if v, ok := stgInfo[md.KEY_CFG_FILE_SK]; !ok || v == "" {
  67. return e.NewErrCode(e.ERR_CFG)
  68. }
  69. if v, ok := stgInfo[md.KEY_CFG_FILE_BUCKET]; !ok || v == "" {
  70. return e.NewErrCode(e.ERR_CFG)
  71. }
  72. if v, ok := stgInfo[md.KEY_CFG_FILE_SCHEME]; !ok || v == "" {
  73. stgInfo[md.KEY_CFG_FILE_SCHEME] = "http"
  74. SysCfgSet(c, md.KEY_CFG_FILE_SCHEME, stgInfo[md.KEY_CFG_FILE_SCHEME], "文件域名HTTP协议")
  75. }
  76. qiniu.Init(stgInfo[md.KEY_CFG_FILE_AK], stgInfo[md.KEY_CFG_FILE_SK], stgInfo[md.KEY_CFG_FILE_BUCKET], stgInfo[md.KEY_CFG_FILE_REGION], stgInfo[md.KEY_CFG_FILE_SCHEME])
  77. if v, ok := stgInfo[md.KEY_CFG_FILE_HOST]; !ok || v == "" {
  78. var err error
  79. stgInfo[md.KEY_CFG_FILE_HOST], err = qiniu.BucketGetDomain(stgInfo[md.KEY_CFG_FILE_BUCKET])
  80. if err != nil {
  81. logx.Error(err)
  82. return e.NewErrCode(e.ERR_CFG)
  83. }
  84. SysCfgSet(c, md.KEY_CFG_FILE_HOST, stgInfo[md.KEY_CFG_FILE_HOST], "文件域名地址")
  85. }
  86. // 头像缩略图参数
  87. if v, ok := stgInfo[md.KEY_CFG_FILE_AVATAR_THUMBNAIL]; !ok || v == "" {
  88. SysCfgSet(c, md.KEY_CFG_FILE_AVATAR_THUMBNAIL, "?imageView2/1/w/200/h/200/format/png", "文件用户头像缩略图参数")
  89. }
  90. // 检查文件大小限制
  91. if v, ok := stgInfo[md.KEY_CFG_FILE_MAX_SIZE]; ok && v != "" && utils.StrToInt64(v) < fsize {
  92. return e.NewErrCode(e.ERR_FILE_MAX_SIZE)
  93. }
  94. // 检查文件后缀
  95. if v, ok := stgInfo[md.KEY_CFG_FILE_EXT]; ok && v != "" && !strings.Contains(v, ext) {
  96. return e.NewErrCode(e.ERR_FILE_EXT)
  97. }
  98. return nil
  99. }