FileRouter.go 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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, "PUT", "", DeleteFile)
  24. }
  25. }
  26. // 文件上传
  27. func uploadHandler(c *gin.Context) {
  28. header, err := c.FormFile("file")
  29. fmt.Println("header", header.Size)
  30. if err != nil {
  31. c.JSON(200, CreateResultError(400, "上传错误"))
  32. return
  33. }
  34. fmt.Println("header", header.Size)
  35. //dst := header.Filename
  36. // gin 简单做了封装,拷贝了文件流
  37. //if err := c.SaveUploadedFile(header, dst); err != nil {
  38. // c.JSON(200, CreateResultError(400, "上传错误"))
  39. // return
  40. //}
  41. //上传到的路径
  42. //path := 'resource/public/uploads/20060102150405test.xlsx'
  43. header.Filename = fmt.Sprintf("%s%s", time.Now().Format("20060102150405"), header.Filename) // 文件名格式 自己可以改 建议保证唯一性
  44. path := filepath + header.Filename //路径+文件名上传
  45. // 上传文件到指定的目录
  46. err = c.SaveUploadedFile(header, path)
  47. if err != nil {
  48. err = errors.New(fmt.Sprintf("上传失败,%v", err))
  49. return
  50. }
  51. c.JSON(200, CreateResultData(map[string]interface{}{
  52. "url": "/api/static/" + header.Filename,
  53. }))
  54. }
  55. // DeleteFile 文件上传
  56. func DeleteFile(c *gin.Context) {
  57. data := share.GetJsonAnyParam(c)
  58. fileUrl, _ := data("fileUrl")
  59. url := cast.ToString(fileUrl)
  60. if strings.Index(url, "/api/static/") != 0 {
  61. c.JSON(200, CreateResultError(400, "文件路径错误"))
  62. }
  63. url = fmt.Sprint("file/resources/", strings.Replace(url, "/api/static/", "", 1))
  64. s, err := os.Stat(url)
  65. if os.IsNotExist(err) {
  66. c.JSON(200, CreateResultError(400, "文件不存在"))
  67. return
  68. }
  69. if s.IsDir() {
  70. c.JSON(200, CreateResultError(400, "路径不存在"))
  71. return
  72. }
  73. err = os.Remove(url)
  74. if err != nil {
  75. c.JSON(200, CreateResultError(400, "删除失败"))
  76. return
  77. }
  78. c.JSON(200, CreateResult())
  79. }