From bb8c6763c2c9bfccd210d998e17eaa66aa20e593 Mon Sep 17 00:00:00 2001 From: zhangqian <zhangqian@123.com> Date: 星期二, 08 八月 2023 10:49:29 +0800 Subject: [PATCH] 增加文件下载和预览接口,并统计下载和预览次数 --- api/v1/file.go | 102 +++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 87 insertions(+), 15 deletions(-) diff --git a/api/v1/file.go b/api/v1/file.go index 9fbdc78..348a72c 100644 --- a/api/v1/file.go +++ b/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, ¶ms) +// 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, ¶ms) 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, ¶ms) + 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) } -- Gitblit v1.8.0