UpFile.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. package controllers
  2. import (
  3. "Cold_Api/conf"
  4. "Cold_Api/controllers/lib"
  5. "Cold_Api/models/Account"
  6. "fmt"
  7. beego "github.com/beego/beego/v2/server/web"
  8. )
  9. type UpFileController struct {
  10. beego.Controller
  11. Admin_r Account.Admin // 登陆的用户
  12. }
  13. func (c *UpFileController) Prepare() {
  14. GetCookie := c.Ctx.GetCookie("User_tokey")
  15. GetString := c.GetString("User_tokey")
  16. User_tokey := GetString
  17. if len(User_tokey) == 0 {
  18. User_tokey = GetCookie
  19. }
  20. if Account.Admin_r == nil {
  21. return
  22. }
  23. c.Admin_r = *Account.Admin_r
  24. }
  25. //func (c *UpFileController) UpFile() {
  26. //
  27. // f, h, _ := c.GetFile("file") //获取上传的文件
  28. // ext := path.Ext(h.Filename)
  29. // //验证后缀名是否符合要求
  30. // var AllowExtMap map[string]bool = map[string]bool{
  31. // ".jpg": true,
  32. // ".jpeg": true,
  33. // ".png": true,
  34. // ".pdf": true,
  35. // }
  36. // if _, ok := AllowExtMap[ext]; !ok {
  37. // c.Ctx.WriteString("后缀名不符合上传要求")
  38. // return
  39. // }
  40. // //创建目录
  41. // uploadDir := conf.Oss_file // + time.Now().Format("2006/01/02/")
  42. // err := os.MkdirAll(uploadDir, 777)
  43. // if err != nil {
  44. // c.Ctx.WriteString(fmt.Sprintf("%v", err))
  45. // return
  46. // }
  47. // //构造文件名称
  48. // rand.Seed(time.Now().UnixNano())
  49. // randNum := fmt.Sprintf("%d", rand.Intn(9999)+1000)
  50. // hashName := md5.Sum([]byte(time.Now().Format("2006_01_02_15_04_05_") + randNum))
  51. //
  52. // fileName := fmt.Sprintf("%x", hashName) + ext
  53. // //this.Ctx.WriteString( fileName )
  54. //
  55. // fpath := uploadDir + fileName
  56. // println(fpath)
  57. // defer f.Close() //关闭上传的文件,不然的话会出现临时文件不能清除的情况
  58. // err = c.SaveToFile("file", fpath)
  59. // if err != nil {
  60. // c.Ctx.WriteString(fmt.Sprintf("%v", err))
  61. // }
  62. // c.Ctx.WriteString("{\n \"code\": 0\n ,\"msg\": \"ok!\"\n ,\"data\": {\n \"src\": \"" + conf.Oss + fileName + "\"\n }\n} ")
  63. //}
  64. // ConfigUpFileToken 获取七牛云上传Token
  65. func (c *UpFileController) ConfigUpFileToken() {
  66. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: lib.UploadToken(c.GetString("T_suffix"))}
  67. c.ServeJSON()
  68. return
  69. }
  70. // UploadFile 公共文件上传接口,上传文件到七牛云并返回七牛云文件路径
  71. func (c *UpFileController) UploadFile() {
  72. // 获取上传的文件(单文件模式)
  73. file, fileHeader, err := c.GetFile("file")
  74. if err != nil {
  75. c.Data["json"] = lib.JSONS{Code: 202, Msg: "请选择要上传的文件"}
  76. c.ServeJSON()
  77. return
  78. }
  79. defer file.Close()
  80. // 验证文件大小(500M限制)
  81. if fileHeader.Size > conf.DefaultUploadFileSizeLimit {
  82. c.Data["json"] = lib.JSONS{Code: 202, Msg: fmt.Sprintf("文件大小超过%dM限制", conf.DefaultUploadFileSizeLimit/1024/1024)}
  83. c.ServeJSON()
  84. return
  85. }
  86. // 上传到七牛云
  87. fileUrl, err := lib.UploadFileToQiniu(fileHeader, "uploads/")
  88. if err != nil {
  89. c.Data["json"] = lib.JSONS{Code: 202, Msg: fmt.Sprintf("上传文件 %s 到七牛云失败: %v", fileHeader.Filename, err)}
  90. c.ServeJSON()
  91. return
  92. }
  93. // 返回成功结果
  94. c.Data["json"] = lib.JSONS{
  95. Code: 200,
  96. Msg: "上传成功!",
  97. Data: map[string]interface{}{
  98. "url": fileUrl,
  99. "name": fileHeader.Filename,
  100. "size": fileHeader.Size,
  101. },
  102. }
  103. c.ServeJSON()
  104. return
  105. }