zhangqian
2023-08-08 bb8c6763c2c9bfccd210d998e17eaa66aa20e593
api/v1/file.go
@@ -3,7 +3,6 @@
import (
   "aps_crm/model"
   "aps_crm/model/request"
   "aps_crm/model/response"
   "aps_crm/pkg/contextx"
   "aps_crm/pkg/ecode"
   "aps_crm/pkg/httpx"
@@ -11,6 +10,7 @@
   "aps_crm/utils/upload"
   "github.com/gin-gonic/gin"
   "github.com/spf13/cast"
   "io"
   "os"
   "path/filepath"
)
@@ -131,28 +131,100 @@
//   ctx.Ok()
//}
// List
// @Tags      附件管理
// @Summary   获取附件列表
//// 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   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/download [post]
func (s *FileApi) Download(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.DownloadCount++
   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)
}
// Preview
// @Tags   附件管理
// @Summary   附件预览
// @Produce   application/json
// @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, 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)
   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)
}