UpFile.go 3.0 KB

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