From d20acf38c36c11ee4428c3e74a17f5870dc61b51 Mon Sep 17 00:00:00 2001 From: liujiandao <274878379@qq.com> Date: 星期四, 16 十一月 2023 09:51:00 +0800 Subject: [PATCH] Merge branch 'master' of http://192.168.5.5:10010/r/aps/SRM --- api/v1/test/contract.go | 133 +++++++++++++++++++++++++++++++++++++------ 1 files changed, 113 insertions(+), 20 deletions(-) diff --git a/api/v1/test/contract.go b/api/v1/test/contract.go index eccd62c..6ae88f9 100644 --- a/api/v1/test/contract.go +++ b/api/v1/test/contract.go @@ -1,14 +1,20 @@ package test import ( - "github.com/flipped-aurora/gin-vue-admin/server/global" - "github.com/flipped-aurora/gin-vue-admin/server/model/common/request" - "github.com/flipped-aurora/gin-vue-admin/server/model/common/response" - "github.com/flipped-aurora/gin-vue-admin/server/model/test" - testReq "github.com/flipped-aurora/gin-vue-admin/server/model/test/request" - "github.com/flipped-aurora/gin-vue-admin/server/service" + "bytes" + "fmt" "github.com/gin-gonic/gin" + "github.com/h2non/filetype" "go.uber.org/zap" + "net/http" + "srm/global" + "srm/model/common/request" + "srm/model/common/response" + "srm/model/test" + testReq "srm/model/test/request" + "srm/service" + "strconv" + "time" ) type ContractApi struct { @@ -25,9 +31,9 @@ // @Param file formData file true "涓婁紶鏂囦欢" // @Param name formData string true "鏂囦欢鍚嶇О" // @Success 200 {string} string "{"success":true,"data":{},"msg":"鑾峰彇鎴愬姛"}" -// @Router /api/con/createContract [post] +// @Router /con/createContract [post] func (conApi *ContractApi) CreateContract(c *gin.Context) { - name := c.Param("name") + name := c.PostForm("name") file, err := c.FormFile("file") if err != nil { c.JSON(400, gin.H{"error": err.Error()}) @@ -39,9 +45,20 @@ defer f.Close() f.Read(fileContent) + // 閲嶇疆鏂囦欢鎸囬拡 + f.Seek(0, 0) + + // 浣跨敤 filetype 搴撴娴嬫枃浠剁被鍨� + kind, _ := filetype.Match(fileContent) + if kind == filetype.Unknown { + c.JSON(http.StatusBadRequest, gin.H{"error": "Unknown file type"}) + return + } + contract := test.Contract{ FileName: name, FileContent: fileContent, + FileType: kind.MIME.Value, } if err, id := conService.CreateContract(&contract); err != nil { @@ -49,7 +66,7 @@ response.FailWithMessage("鍒涘缓澶辫触", c) } else { //response.OkWithMessage("鍒涘缓鎴愬姛", c) - response.OkWithData(gin.H{"id": id}, c) + response.OkWithData(gin.H{"id": id, "name": name}, c) } } @@ -61,7 +78,7 @@ // @Produce application/json // @Param data body test.Contract true "鍒犻櫎Contract" // @Success 200 {string} string "{"success":true,"data":{},"msg":"鍒犻櫎鎴愬姛"}" -// @Router /api/con/deleteContract [delete] +// @Router /con/deleteContract [delete] func (conApi *ContractApi) DeleteContract(c *gin.Context) { var con test.Contract err := c.ShouldBindJSON(&con) @@ -85,7 +102,7 @@ // @Produce application/json // @Param data body request.IdsReq true "鎵归噺鍒犻櫎Contract" // @Success 200 {string} string "{"success":true,"data":{},"msg":"鎵归噺鍒犻櫎鎴愬姛"}" -// @Router /api/con/deleteContractByIds [delete] +// @Router /con/deleteContractByIds [delete] func (conApi *ContractApi) DeleteContractByIds(c *gin.Context) { var IDS request.IdsReq err := c.ShouldBindJSON(&IDS) @@ -109,7 +126,7 @@ // @Produce application/json // @Param data body test.Contract true "鏇存柊Contract" // @Success 200 {string} string "{"success":true,"data":{},"msg":"鏇存柊鎴愬姛"}" -// @Router /api/con/updateContract [put] +// @Router /con/updateContract [put] func (conApi *ContractApi) UpdateContract(c *gin.Context) { var con test.Contract err := c.ShouldBindJSON(&con) @@ -133,7 +150,7 @@ // @Produce application/json // @Param data query test.Contract true "鐢╥d鏌ヨContract" // @Success 200 {string} string "{"success":true,"data":{},"msg":"鏌ヨ鎴愬姛"}" -// @Router /api/con/findContract [get] +// @Router /con/findContract [get] func (conApi *ContractApi) FindContract(c *gin.Context) { var con test.Contract err := c.ShouldBindQuery(&con) @@ -157,7 +174,7 @@ // @Produce application/json // @Param data query testReq.ContractSearch true "鍒嗛〉鑾峰彇Contract鍒楄〃" // @Success 200 {string} string "{"success":true,"data":{},"msg":"鑾峰彇鎴愬姛"}" -// @Router /api/con/getContractList [get] +// @Router /con/getContractList [get] func (conApi *ContractApi) GetContractList(c *gin.Context) { var pageInfo testReq.ContractSearch err := c.ShouldBindQuery(&pageInfo) @@ -184,22 +201,98 @@ // @Security ApiKeyAuth // @accept application/json // @Produce application/json -// @Param data query testReq.ContractSearch true "棰勮Contract" +// @Param data query test.Contract true "鐢╥d鏌ヨContract" // @Success 200 {string} string "{"success":true,"data":{},"msg":"棰勮鎴愬姛"}" -// @Router /api/con/previewContract [get] +// @Router /con/previewContract [get] func (conApi *ContractApi) PreviewContract(c *gin.Context) { - var pageInfo testReq.ContractSearch - err := c.ShouldBindQuery(&pageInfo) + var con test.Contract + err := c.ShouldBindQuery(&con) if err != nil { response.FailWithMessage(err.Error(), c) return } - contract, err := conService.GetContract(pageInfo.ID) + + id := c.Query("id") + if id == "" { + response.FailWithMessage("id涓嶈兘涓虹┖", c) + return + } + + val64, err := strconv.ParseUint(id, 10, 64) + if err != nil { + response.FailWithMessage("id鏍煎紡閿欒", c) + return + } + + // Convert uint64 to uint + conId := uint(val64) + + contract, err := conService.GetContract(conId) if err != nil { global.GVA_LOG.Error("鑾峰彇澶辫触!", zap.Error(err)) response.FailWithMessage("鑾峰彇澶辫触", c) return } else { - c.Data(200, "application/pdf", contract.FileContent) + //c.Writer.Header().Set("Content-Type", "application/octect-stream") + //c.Writer.Header().Set("Content-Disposition", "attachment;filename="+contract.FileName) + //c.Writer.Write(contract.FileContent) + //c.Data(200, "application/octect-stream", contract.FileContent) + //reader := bytes.NewReader(contract.FileContent) + //c.DataFromReader(http.StatusOK, int64(len(contract.FileContent)), "application/pdf", reader, map[string]string{"Content-Disposition": fmt.Sprintf("attachment; filename=%s", contract.FileName)}) + reader := bytes.NewReader(contract.FileContent) + c.Header("Content-Type", contract.FileType) + c.Writer.Header().Set("Content-Disposition", "inline; filename="+contract.FileName) + http.ServeContent(c.Writer, c.Request, contract.FileName, time.Now(), reader) + } +} + +// DownloadContract 涓嬭浇Contract +// @Tags Contract +// @Summary 涓嬭浇Contract +// @Security ApiKeyAuth +// @accept application/json +// @Produce application/json +// @Param data query test.Contract true "鐢╥d鏌ヨContract" +// @Success 200 {string} string "{"success":true,"data":{},"msg":"涓嬭浇鎴愬姛"}" +// @Router /con/downloadContract [get] +func (conApi *ContractApi) DownloadContract(c *gin.Context) { + var con test.Contract + err := c.ShouldBindQuery(&con) + if err != nil { + response.FailWithMessage(err.Error(), c) + return + } + + id := c.Query("id") + if id == "" { + response.FailWithMessage("id涓嶈兘涓虹┖", c) + return + } + + val64, err := strconv.ParseUint(id, 10, 64) + if err != nil { + response.FailWithMessage("id鏍煎紡閿欒", c) + return + } + + // Convert uint64 to uint + conId := uint(val64) + + contract, err := conService.GetContract(conId) + if err != nil { + global.GVA_LOG.Error("鑾峰彇澶辫触!", zap.Error(err)) + response.FailWithMessage("鑾峰彇澶辫触", c) + return + } else { + reader := bytes.NewReader(contract.FileContent) + // 璁剧疆蹇呰鐨勫ご淇℃伅 + c.Header("Content-Description", "File Transfer") + c.Header("Content-Transfer-Encoding", "binary") + c.Header("Content-Disposition", fmt.Sprintf("attachment; filename=%s", contract.FileName)) + c.Header("Content-Type", contract.FileType) + + // 灏嗘枃浠朵綔涓哄搷搴斾綋鍙戦�� + http.ServeContent(c.Writer, c.Request, contract.FileName, time.Now(), reader) + c.File(contract.FileName) } } -- Gitblit v1.8.0