zhangqian
2023-11-01 530fed8ec225453572d57b15c200ab062c335457
api/v1/file.go
@@ -3,16 +3,16 @@
import (
   "aps_crm/model"
   "aps_crm/model/request"
   "aps_crm/model/response"
   "aps_crm/pkg/contextx"
   "aps_crm/pkg/ecode"
   "aps_crm/pkg/httpx"
   "aps_crm/service"
   "github.com/flipped-aurora/gin-vue-admin/server/utils/upload"
   "aps_crm/utils/upload"
   "github.com/gin-gonic/gin"
   "github.com/spf13/cast"
   "io"
   "os"
   "path/filepath"
   "strconv"
)
type FileApi struct{}
@@ -21,7 +21,8 @@
// @Tags      附件管理
// @Summary   添加附件
// @Produce   application/json
// @Param      object   body      request.AddFile   true   "查询参数"
// @Param      object   formData   request.AddFile   true   "查询参数"
// @Param      file   formData   file   true   "上传文件"
// @Success   200      {object}   contextx.Response{}
// @Router      /api/file/add [post]
func (s *FileApi) Add(c *gin.Context) {
@@ -44,7 +45,7 @@
      return
   }
   _, filename := filepath.Split(filePath)
   _, filename := filepath.Split(header.Filename)
   fileRecord := &model.File{
      Name:          filename,
@@ -80,17 +81,11 @@
      return
   }
   id, _ := strconv.Atoi(c.Param("id"))
   idx := c.Param("id")
   id := cast.ToUint(idx)
   file, err := model.NewFileSearch().SetId(id).First()
   if err != nil {
      ctx.FailWithMsg(ecode.ParamsErr, "查找文件失败")
      return
   }
   err = os.Remove(file.FilePath)
   if err != nil {
      ctx.FailWithMsg(ecode.ParamsErr, "删除文件失败")
      return
   }
@@ -100,58 +95,136 @@
      return
   }
   err = os.Remove(file.FilePath)
   if err != nil {
      ctx.FailWithMsg(ecode.ParamsErr, "删除文件失败")
      return
   }
   ctx.Ok()
}
// Update
// @Tags      附件管理
// @Summary   更新附件
//// Update
//// @Tags      附件管理
//// @Summary   更新附件
//// @Produce   application/json
//// @Param      object   body      request.UpdateFile   true   "查询参数"
//// @Success   200      {object}   contextx.Response{}
//// @Router      /api/file/update [put]
//func (s *FileApi) Update(c *gin.Context) {
//   var params request.UpdateFile
//   ctx, ok := contextx.NewContext(c, &params)
//   if !ok {
//      return
//   }
//   if params.Id == 0 {
//      ctx.Fail(ecode.ParamsErr)
//   }
//   params.File.ID = params.Id
//
//   errCode := service.NewFileService().UpdateFile(&params.File)
//   if errCode != ecode.OK {
//      ctx.Fail(errCode)
//      return
//   }
//
//   ctx.Ok()
//}
//// List
//// @Tags      附件管理
//// @Summary   获取附件列表
//// @Produce   application/json
//// @Param      object   query      request.GetFileList   true   "参数"
//// @Success   200   {object}   response.ListResponse{data=[]model.File}
//// @Router      /api/file/list [get]
//func (s *FileApi) List(c *gin.Context) {
//   var params request.GetFileList
//   ctx, ok := contextx.NewContext(c, &params)
//   if !ok {
//      return
//   }
//
//   file, total, errCode := service.NewFileService().GetFileList()
//   if errCode != ecode.OK {
//      ctx.Fail(errCode)
//      return
//   }
//
//   ctx.OkWithDetailed(response.ListResponse{
//      Data:  file,
//      Count: total,
//   })
//}
// Download
// @Tags   附件管理
// @Summary   附件下载
// @Produce   application/json
// @Param      object   body      request.UpdateFile   true   "查询参数"
// @Param      object   body      request.DownloadFile   true   "参数"
// @Success   200      {object}   contextx.Response{}
// @Router      /api/file/update [put]
func (s *FileApi) Update(c *gin.Context) {
   var params request.UpdateFile
// @Router      /api/file/download [post]
func (s *FileApi) Download(c *gin.Context) {
   var params request.DownloadFile
   ctx, ok := contextx.NewContext(c, &params)
   if !ok {
      return
   }
   if params.Id == 0 {
      ctx.Fail(ecode.ParamsErr)
   }
   params.File.Id = params.Id
   errCode := service.NewFileService().UpdateFile(&params.File)
   file, errCode := service.NewFileService().GetFile(params.Id)
   if errCode != ecode.OK {
      ctx.Fail(errCode)
      return
   }
   if file.SourceType != params.SourceType || file.SourceId != params.SourceId || file.Key != params.Key {
      ctx.FailWithMsg(ecode.ParamsErr, "文件不存在")
      return
   }
   f, err := os.Open(file.FilePath)
   if err != nil {
      ctx.FailWithMsg(ecode.ParamsErr, "文件不存在")
      return
   }
   file.DownloadCount++
   service.NewFileService().UpdateFile(file)
   ctx.Ok()
   data, err := io.ReadAll(f)
   c.Writer.Header().Set("Content-Type", "application/octet-stream")
   c.Writer.Header().Set("Content-Disposition", "attachment;filename="+file.Name)
   c.Writer.Write(data)
}
// List
// @Tags      附件管理
// @Summary   获取附件列表
// Preview
// @Tags   附件管理
// @Summary   附件预览
// @Produce   application/json
// @Param      object   query      request.GetFileList   true   "参数"
// @Success   200   {object}   response.ListResponse{data=[]model.File}
// @Router      /api/file/list [get]
func (s *FileApi) List(c *gin.Context) {
   var params request.GetFileList
// @Param      object   body      request.DownloadFile   true   "参数"
// @Success   200      {object}   contextx.Response{}
// @Router      /api/file/preview [post]
func (s *FileApi) Preview(c *gin.Context) {
   var params request.DownloadFile
   ctx, ok := contextx.NewContext(c, &params)
   if !ok {
      return
   }
   file, total, errCode := service.NewFileService().GetFileList()
   file, errCode := service.NewFileService().GetFile(params.Id)
   if errCode != ecode.OK {
      ctx.Fail(errCode)
      return
   }
   if file.SourceType != params.SourceType || file.SourceId != params.SourceId || file.Key != params.Key {
      ctx.FailWithMsg(ecode.ParamsErr, "文件不存在")
      return
   }
   f, err := os.Open(file.FilePath)
   if err != nil {
      ctx.FailWithMsg(ecode.ParamsErr, "文件不存在")
      return
   }
   file.PreviewCount++
   service.NewFileService().UpdateFile(file)
   ctx.OkWithDetailed(response.ListResponse{
      Data:  file,
      Count: total,
   })
   data, err := io.ReadAll(f)
   c.Writer.Header().Set("Content-Type", "application/octect-stream")
   c.Writer.Header().Set("Content-Disposition", "attachment;filename="+file.Name)
   c.Writer.Write(data)
}