From ecd0774318cbf43cc2b32bc80c9b8aef311dc809 Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期三, 09 八月 2023 13:49:13 +0800
Subject: [PATCH] merge

---
 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, &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)
 }

--
Gitblit v1.8.0