123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- package admin
- import (
- "github.com/gin-gonic/gin"
- "log"
- "net/http"
- "os"
- "server/dao"
- "server/global"
- "server/model/common/response"
- "strings"
- )
- type FileApi struct{}
- func (fa *FileApi) QueryFileGenre(c *gin.Context) {
- genre, err := fileService.QueryFileGenre()
- if err != nil {
- response.FailWithMessage("失败", c)
- global.GVA_LOG.Error("QueryFileGenre ======= " + err.Error())
- return
- }
- response.OkWithData(genre, c)
- }
- func (fa *FileApi) CreateFileGenre(c *gin.Context) {
- var fileGenre dao.FileGenre
- err := c.ShouldBindJSON(&fileGenre)
- if err != nil {
- response.FailWithMessage("失败", c)
- global.GVA_LOG.Error("CreateFileGenre ====== " + err.Error())
- return
- }
- err = fileService.CreateFileGenre(fileGenre)
- if err != nil {
- response.FailWithMessage("失败", c)
- global.GVA_LOG.Error("CreateFileGenre ====== " + err.Error())
- return
- }
- response.OkWithMessage("新增成功", c)
- }
- func (fa *FileApi) UpdateFileGenre(c *gin.Context) {
- var fileGenre dao.FileGenre
- err := c.ShouldBindJSON(&fileGenre)
- if err != nil {
- response.FailWithMessage("失败", c)
- global.GVA_LOG.Error("UpdateFileGenre ====== " + err.Error())
- return
- }
- err = fileService.UpdateFileGenre(fileGenre)
- if err != nil {
- response.FailWithMessage("失败", c)
- global.GVA_LOG.Error("UpdateFileGenre ====== " + err.Error())
- return
- }
- response.OkWithMessage("修改成功", c)
- }
- func (fa *FileApi) DeleteFileGenre(c *gin.Context) {
- var fileGenre dao.FileGenre
- err := c.ShouldBindJSON(&fileGenre)
- if err != nil {
- response.FailWithMessage("失败", c)
- global.GVA_LOG.Error("DeleteFileGenre ====== " + err.Error())
- return
- }
- err = fileService.DeleteFileGenre(fileGenre)
- if err != nil {
- response.FailWithMessage("失败", c)
- global.GVA_LOG.Error("DeleteFileGenre ====== " + err.Error())
- return
- }
- response.OkWithMessage("删除成功", c)
- }
- func (fa *FileApi) FileDownload(c *gin.Context) {
- path := c.Query("path")
- name := c.Query("name")
- // 验证或清理文件路径(这里只是一个简单的示例)
- if strings.Contains(path, "..") {
- response.FailWithMessage("无效的路径", c)
- log.Println("检测到可能的路径遍历攻击尝试")
- return
- }
- _, err := os.Stat(path)
- if err != nil {
- // 如果出现错误,可能是文件或目录不存在
- if os.IsNotExist(err) {
- c.JSON(http.StatusNotFound, gin.H{"error": "文件不存在"})
- return
- }
- // 其他错误处理
- c.AbortWithError(http.StatusInternalServerError, err)
- return
- }
- c.Header("Content-Type", "application/octet-stream") // 表示是文件流,唤起浏览器下载,一般设置了这个,就要设置文件名
- c.Header("Content-Disposition", "attachment; filename="+name) // 用来指定下载下来的文件名
- c.Header("Content-Transfer-Encoding", "binary") // 表示传输过程中的编码形式,乱码问题可能就是因为它
- c.File(path)
- }
|