liujiandao
2023-11-16 d20acf38c36c11ee4428c3e74a17f5870dc61b51
api/v1/test/contract.go
@@ -4,6 +4,7 @@
   "bytes"
   "fmt"
   "github.com/gin-gonic/gin"
   "github.com/h2non/filetype"
   "go.uber.org/zap"
   "net/http"
   "srm/global"
@@ -32,7 +33,7 @@
// @Success 200 {string} string "{"success":true,"data":{},"msg":"获取成功"}"
// @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()})
@@ -44,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 {
@@ -54,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)
   }
}
@@ -228,7 +240,7 @@
      //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.Writer.Header().Set("Content-Type", "application/pdf")
      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)
   }
@@ -277,7 +289,7 @@
      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", "application/pdf")
      c.Header("Content-Type", contract.FileType)
      // 将文件作为响应体发送
      http.ServeContent(c.Writer, c.Request, contract.FileName, time.Now(), reader)