FileRouter.go 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. package router
  2. import (
  3. "demo/share"
  4. "errors"
  5. "fmt"
  6. "github.com/gin-gonic/gin"
  7. "github.com/spf13/cast"
  8. "os"
  9. "strings"
  10. "time"
  11. )
  12. var (
  13. uploadFileKey = "upload.bat-key"
  14. filepath = "./file/resources/"
  15. )
  16. func FileRouter(engine *gin.RouterGroup) {
  17. //文件静态资源,可以直接访问静态资源文件
  18. user := engine.Group("/file")
  19. {
  20. //文章上传
  21. //user.POST("/upload", uploadHandler)
  22. PushRouter(user, "POST", "/upload", uploadHandler)
  23. PushRouter(user, "POST", "/upload/type", UploadHandlerByType)
  24. PushRouter(user, "PUT", "", DeleteFile)
  25. }
  26. }
  27. // 文件上传
  28. func uploadHandler(c *gin.Context) {
  29. header, err := c.FormFile("file")
  30. fmt.Println("header", header.Size)
  31. if err != nil {
  32. c.JSON(200, CreateResultError(400, "上传错误"))
  33. return
  34. }
  35. fmt.Println("header", header.Size)
  36. //dst := header.Filename
  37. // gin 简单做了封装,拷贝了文件流
  38. //if err := c.SaveUploadedFile(header, dst); err != nil {
  39. // c.JSON(200, CreateResultError(400, "上传错误"))
  40. // return
  41. //}
  42. //上传到的路径
  43. //path := 'resource/public/uploads/20060102150405test.xlsx'
  44. header.Filename = fmt.Sprintf("%s%s", time.Now().Format("20060102150405"), header.Filename) // 文件名格式 自己可以改 建议保证唯一性
  45. path := filepath + header.Filename //路径+文件名上传
  46. // 上传文件到指定的目录
  47. err = c.SaveUploadedFile(header, path)
  48. if err != nil {
  49. err = errors.New(fmt.Sprintf("上传失败,%v", err))
  50. return
  51. }
  52. c.JSON(200, CreateResultData(map[string]interface{}{
  53. "url": "/api/static/" + header.Filename,
  54. }))
  55. }
  56. func UploadHandlerByType(c *gin.Context) {
  57. header, _ := c.FormFile("file")
  58. if header != nil {
  59. uploadHandler(c)
  60. return
  61. }
  62. header, _ = c.FormFile("image")
  63. if header != nil {
  64. //大于2M
  65. if header.Size > 1024*1024*2 {
  66. c.JSON(200, CreateResultError(400, "图片大小不能超过2M"))
  67. return
  68. }
  69. l := len(header.Filename)
  70. if strings.LastIndex(header.Filename, ".png") == l-4 ||
  71. strings.LastIndex(header.Filename, ".jpg") == l-4 ||
  72. strings.LastIndex(header.Filename, ".jpeg") == l-5 ||
  73. strings.LastIndex(header.Filename, ".gif") == l-4 {
  74. header.Filename = fmt.Sprintf("%s%s", time.Now().Format("20060102150405"), header.Filename) // 文件名格式 自己可以改 建议保证唯一性
  75. path := filepath + "image/" + header.Filename //路径+文件名上传
  76. // 上传文件到指定的目录
  77. err := c.SaveUploadedFile(header, path)
  78. if err != nil {
  79. err = errors.New(fmt.Sprintf("上传失败,%v", err))
  80. return
  81. }
  82. data := CreateResultData(map[string]interface{}{
  83. "url": "/api/static/image/" + header.Filename,
  84. })
  85. data["errno"] = 0
  86. c.JSON(200, data)
  87. } else {
  88. c.JSON(200, CreateResultError(400, "图片格式错误"))
  89. }
  90. return
  91. }
  92. header, _ = c.FormFile("video")
  93. if header != nil {
  94. if header.Size > 1024*1024*40 {
  95. c.JSON(200, CreateResultError(400, "视频大小不能超过40M"))
  96. return
  97. }
  98. l := len(header.Filename)
  99. if strings.LastIndex(header.Filename, ".mp4") == l-4 {
  100. header.Filename = fmt.Sprintf("%s%s", time.Now().Format("20060102150405"), header.Filename) // 文件名格式 自己可以改 建议保证唯一性
  101. path := filepath + "video/" + header.Filename //路径+文件名上传
  102. // 上传文件到指定的目录
  103. err := c.SaveUploadedFile(header, path)
  104. if err != nil {
  105. err = errors.New(fmt.Sprintf("上传失败,%v", err))
  106. return
  107. }
  108. data := CreateResultData(map[string]interface{}{
  109. "url": "/api/static/video/" + header.Filename,
  110. })
  111. data["errno"] = 0
  112. c.JSON(200, data)
  113. } else {
  114. c.JSON(200, CreateResultError(400, "视频格式错误"))
  115. }
  116. return
  117. }
  118. }
  119. // DeleteFile 文件上传
  120. func DeleteFile(c *gin.Context) {
  121. data := share.GetJsonAnyParam(c)
  122. fileUrl, _ := data("fileUrl")
  123. url := cast.ToString(fileUrl)
  124. if strings.Index(url, "/api/static/") != 0 {
  125. c.JSON(200, CreateResultError(400, "文件路径错误"))
  126. }
  127. url = strings.Replace(url, "/api/static/", "file/resources/", 1)
  128. s, err := os.Stat(url)
  129. if os.IsNotExist(err) {
  130. c.JSON(200, CreateResultError(400, "文件不存在"))
  131. return
  132. }
  133. if s.IsDir() {
  134. c.JSON(200, CreateResultError(400, "路径不存在"))
  135. return
  136. }
  137. err = os.Remove(url)
  138. if err != nil {
  139. c.JSON(200, CreateResultError(400, "删除失败"))
  140. return
  141. }
  142. c.JSON(200, CreateResult())
  143. }