From 88324f3d47dab99da5b4bd9422e50b63b97c242c Mon Sep 17 00:00:00 2001
From: wangpengfei <274878379@qq.com>
Date: 星期三, 30 八月 2023 19:51:00 +0800
Subject: [PATCH] fix
---
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