file.go 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. package admin
  2. import (
  3. "github.com/gin-gonic/gin"
  4. "log"
  5. "net/http"
  6. "os"
  7. "server/dao"
  8. "server/global"
  9. "server/model/common/response"
  10. "strconv"
  11. "strings"
  12. )
  13. type FileApi struct{}
  14. func (fa *FileApi) QueryFileGenre(c *gin.Context) {
  15. genre, err := fileService.QueryFileGenre()
  16. if err != nil {
  17. response.FailWithMessage("失败", c)
  18. global.GVA_LOG.Error("QueryFileGenre ======= " + err.Error())
  19. return
  20. }
  21. response.OkWithData(genre, c)
  22. }
  23. func (fa *FileApi) CreateFileGenre(c *gin.Context) {
  24. var fileGenre dao.FileGenre
  25. err := c.ShouldBindJSON(&fileGenre)
  26. if err != nil {
  27. response.FailWithMessage("失败", c)
  28. global.GVA_LOG.Error("CreateFileGenre ====== " + err.Error())
  29. return
  30. }
  31. err = fileService.CreateFileGenre(fileGenre)
  32. if err != nil {
  33. response.FailWithMessage("失败", c)
  34. global.GVA_LOG.Error("CreateFileGenre ====== " + err.Error())
  35. return
  36. }
  37. response.OkWithMessage("新增成功", c)
  38. }
  39. func (fa *FileApi) QueryNecessaryDocuments(c *gin.Context) {
  40. necessaryDocument, err := fileService.QueryNecessaryDocuments()
  41. if err != nil {
  42. response.FailWithMessage("失败", c)
  43. global.GVA_LOG.Error("QueryNecessaryDocument ======= " + err.Error())
  44. return
  45. }
  46. response.OkWithData(necessaryDocument, c)
  47. }
  48. func (fa *FileApi) QueryNecessaryDocumentByGenreId(c *gin.Context) {
  49. genreId := c.Query("genre_id")
  50. id, _ := strconv.Atoi(genreId)
  51. necessaryDocument, err := fileService.QueryNecessaryDocumentByGenreId(id)
  52. if err != nil {
  53. response.FailWithMessage("失败", c)
  54. global.GVA_LOG.Error("QueryNecessaryDocumentByGenreId ======= " + err.Error())
  55. return
  56. }
  57. response.OkWithData(necessaryDocument, c)
  58. }
  59. func (fa *FileApi) CreateNecessaryDocument(c *gin.Context) {
  60. var necessaryDocument dao.NecessaryDocument
  61. err := c.ShouldBindJSON(&necessaryDocument)
  62. if err != nil {
  63. response.FailWithMessage("失败", c)
  64. global.GVA_LOG.Error("CreateNecessaryDocument ====== " + err.Error())
  65. return
  66. }
  67. err = fileService.CreateNecessaryDocument(necessaryDocument)
  68. if err != nil {
  69. response.FailWithMessage("失败", c)
  70. global.GVA_LOG.Error("CreateNecessaryDocument ====== " + err.Error())
  71. return
  72. }
  73. response.OkWithMessage("新增成功", c)
  74. }
  75. func (fa *FileApi) UpdateFileGenre(c *gin.Context) {
  76. var fileGenre dao.FileGenre
  77. err := c.ShouldBindJSON(&fileGenre)
  78. if err != nil {
  79. response.FailWithMessage("失败", c)
  80. global.GVA_LOG.Error("UpdateFileGenre ====== " + err.Error())
  81. return
  82. }
  83. err = fileService.UpdateFileGenre(fileGenre)
  84. if err != nil {
  85. response.FailWithMessage("失败", c)
  86. global.GVA_LOG.Error("UpdateFileGenre ====== " + err.Error())
  87. return
  88. }
  89. response.OkWithMessage("修改成功", c)
  90. }
  91. func (fa *FileApi) UpdateNecessaryDocument(c *gin.Context) {
  92. var necessaryDocument dao.NecessaryDocument
  93. err := c.ShouldBindJSON(&necessaryDocument)
  94. if err != nil {
  95. response.FailWithMessage("失败", c)
  96. global.GVA_LOG.Error("UpdateNecessaryDocument ====== " + err.Error())
  97. return
  98. }
  99. err = fileService.UpdateNecessaryDocument(necessaryDocument)
  100. if err != nil {
  101. response.FailWithMessage("失败", c)
  102. global.GVA_LOG.Error("UpdateNecessaryDocument ====== " + err.Error())
  103. return
  104. }
  105. response.OkWithMessage("修改成功", c)
  106. }
  107. func (fa *FileApi) DeleteFileGenre(c *gin.Context) {
  108. var fileGenre dao.FileGenre
  109. err := c.ShouldBindJSON(&fileGenre)
  110. if err != nil {
  111. response.FailWithMessage("失败", c)
  112. global.GVA_LOG.Error("DeleteFileGenre ====== " + err.Error())
  113. return
  114. }
  115. err = fileService.DeleteFileGenre(fileGenre)
  116. if err != nil {
  117. response.FailWithMessage("失败", c)
  118. global.GVA_LOG.Error("DeleteFileGenre ====== " + err.Error())
  119. return
  120. }
  121. response.OkWithMessage("删除成功", c)
  122. }
  123. func (fa *FileApi) DeleteNecessaryDocument(c *gin.Context) {
  124. var necessaryDocument dao.NecessaryDocument
  125. err := c.ShouldBindJSON(&necessaryDocument)
  126. if err != nil {
  127. response.FailWithMessage("失败", c)
  128. global.GVA_LOG.Error("DeleteNecessaryDocument ====== " + err.Error())
  129. return
  130. }
  131. err = fileService.DeleteNecessaryDocument(necessaryDocument)
  132. if err != nil {
  133. response.FailWithMessage("失败", c)
  134. global.GVA_LOG.Error("DeleteNecessaryDocument ====== " + err.Error())
  135. return
  136. }
  137. response.OkWithMessage("删除成功", c)
  138. }
  139. func (fa *FileApi) FileDownload(c *gin.Context) {
  140. path := c.Query("path")
  141. name := c.Query("name")
  142. // 验证或清理文件路径(这里只是一个简单的示例)
  143. if strings.Contains(path, "..") {
  144. response.FailWithMessage("无效的路径", c)
  145. log.Println("检测到可能的路径遍历攻击尝试")
  146. return
  147. }
  148. _, err := os.Stat(path)
  149. if err != nil {
  150. // 如果出现错误,可能是文件或目录不存在
  151. if os.IsNotExist(err) {
  152. c.JSON(http.StatusNotFound, gin.H{"error": "文件不存在"})
  153. return
  154. }
  155. // 其他错误处理
  156. c.AbortWithError(http.StatusInternalServerError, err)
  157. return
  158. }
  159. c.Header("Content-Type", "application/octet-stream") // 表示是文件流,唤起浏览器下载,一般设置了这个,就要设置文件名
  160. c.Header("Content-Disposition", "attachment; filename="+name) // 用来指定下载下来的文件名
  161. c.Header("Content-Transfer-Encoding", "binary") // 表示传输过程中的编码形式,乱码问题可能就是因为它
  162. c.File(path)
  163. }