From 8bf1cad94113d5c604e95e370cf068efdea87d27 Mon Sep 17 00:00:00 2001
From: wangpengfei <274878379@qq.com>
Date: 星期三, 30 八月 2023 09:43:49 +0800
Subject: [PATCH] fix
---
api/v1/file.go | 155 ++++++++++++++++++++++++++++++++++++++-------------
1 files changed, 114 insertions(+), 41 deletions(-)
diff --git a/api/v1/file.go b/api/v1/file.go
index 1edb6b9..bf86288 100644
--- a/api/v1/file.go
+++ b/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, ¶ms)
+// if !ok {
+// return
+// }
+// if params.Id == 0 {
+// ctx.Fail(ecode.ParamsErr)
+// }
+// params.File.ID = params.Id
+//
+// errCode := service.NewFileService().UpdateFile(¶ms.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, ¶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 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, ¶ms)
if !ok {
return
}
- if params.Id == 0 {
- ctx.Fail(ecode.ParamsErr)
- }
- params.File.Id = params.Id
-
- errCode := service.NewFileService().UpdateFile(¶ms.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, ¶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.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)
}
--
Gitblit v1.8.0