huangyan 1 år sedan
förälder
incheckning
97c164ed93
5 ändrade filer med 58 tillägg och 45 borttagningar
  1. 49 43
      app/controller/file.go
  2. 1 1
      app/e/code_msg.go
  3. 2 0
      app/router.go
  4. 2 1
      go.mod
  5. 4 0
      go.sum

+ 49 - 43
app/controller/file.go

@@ -4,18 +4,15 @@ import (
 	"context"
 	"encoding/base64"
 	"file_upload/app/e"
-	"file_upload/app/model"
 	"file_upload/global"
 	"file_upload/simple_zap"
 	"file_upload/utils"
-	"fmt"
 	"github.com/gin-gonic/gin"
 	"github.com/go-playground/validator/v10"
 	"go.mongodb.org/mongo-driver/bson"
 	"go.mongodb.org/mongo-driver/mongo/options"
 	"go.uber.org/zap"
 	"os"
-	"path/filepath"
 )
 
 type Body struct {
@@ -30,7 +27,7 @@ type Body struct {
 // 无返回值
 func SaveFile(c *gin.Context) {
 	// 解析请求体中的文件信息
-	file := model.Root{}
+	file := Body{}
 	err := c.BindJSON(&file)
 	if err != nil {
 		// 日志记录参数解析失败
@@ -39,41 +36,6 @@ func SaveFile(c *gin.Context) {
 		e.ResponseWithMsg(c, e.JSONParsingFailed, e.JSONParsingFailed.GetMsg())
 		return
 	}
-	// 准备将文件信息序列化为BSON格式(MongoDB使用的数据格式)
-	doc := bson.M{
-		"name": file.Name,
-		"type": file.Type,
-		"data": file.Data,
-	}
-	if len(file.Data.Elements) == 2 {
-		imagCode := file.Data.Elements[1].Url
-		_, data := utils.ParseBase64ImageString(imagCode)
-		decodeString, err := base64.StdEncoding.DecodeString(data)
-		if err != nil {
-			simple_zap.WithCtx(context.TODO()).Sugar().Warn(err, "base64解码失败")
-			e.ResponseWithMsg(c, e.ERROR, "图片转换失败")
-			return
-		}
-		optputpath := "./upload" + "/" + file.Name + ".png"
-		create, err := os.Create(optputpath)
-		if err != nil {
-			simple_zap.WithCtx(context.TODO()).Sugar().Warn(err, "创建文件失败")
-			e.ResponseWithMsg(c, e.ERROR, "创建文件失败")
-		}
-		defer create.Close()
-		_, err = create.Write(decodeString)
-		if err != nil {
-			simple_zap.WithCtx(context.TODO()).Sugar().Warn(err, "写入文件失败")
-			e.ResponseWithMsg(c, e.ERROR, "写入文件失败")
-		}
-		simple_zap.WithCtx(context.TODO()).Sugar().Info("文件写入成功")
-		abs, err := filepath.Abs(optputpath)
-		if err != nil {
-			simple_zap.WithCtx(context.TODO()).Sugar().Warn()
-		}
-		file.Data.Elements[1].Url = abs
-		fmt.Println(file.Data.Elements[1].Url)
-	}
 	// 检查文件是否已存在
 	filter := bson.M{"name": file.Name}
 	count, err := global.MongoCon.CountDocuments(context.TODO(), filter)
@@ -89,6 +51,46 @@ func SaveFile(c *gin.Context) {
 		e.ResponseWithMsg(c, e.AlreadyExists, e.AlreadyExists.GetMsg())
 		return
 	}
+	var url string = "https://erp.baozhida.cn/assets/icon-91f5d92f.png"
+	// 准备将文件信息序列化为BSON格式(MongoDB使用的数据格式)
+	m, ok := file.Data.(map[string]any)
+	if ok {
+		elements := m["elements"].([]any)
+		for _, v := range elements {
+			imageurl := v.(map[string]any)["url"]
+			if imageurl != nil {
+				_, data := utils.ParseBase64ImageString(imageurl.(string))
+				decodeString, err := base64.StdEncoding.DecodeString(data)
+				if err != nil {
+					simple_zap.WithCtx(context.TODO()).Sugar().Warn(err, "base64解码失败")
+					e.ResponseWithMsg(c, e.ERROR, "图片转换失败")
+					return
+				}
+				optputpath := "./upload" + "/" + file.Name + ".png"
+				create, err := os.Create(optputpath)
+				if err != nil {
+					simple_zap.WithCtx(context.TODO()).Sugar().Warn(err, "创建文件失败")
+					e.ResponseWithMsg(c, e.ERROR, "创建文件失败")
+					return
+				}
+				defer create.Close()
+				_, err = create.Write(decodeString)
+				if err != nil {
+					simple_zap.WithCtx(context.TODO()).Sugar().Warn(err, "写入文件失败")
+					e.ResponseWithMsg(c, e.ERROR, "写入文件失败")
+					return
+				}
+				simple_zap.WithCtx(context.TODO()).Sugar().Info("文件写入成功")
+				url = "http://localhost:8080/dwonload/" + file.Name + ".png"
+			}
+		}
+	}
+	doc := bson.M{
+		"name": file.Name,
+		"type": file.Type,
+		"data": file.Data,
+		"url":  url,
+	}
 	// 保存文件到MongoDB
 	_, err = global.MongoCon.InsertOne(context.TODO(), doc)
 	if err != nil {
@@ -113,7 +115,10 @@ func TemplateItem(c *gin.Context) {
 	}
 	var result []bson.M
 	opts := options.Find()
-	opts.SetProjection(bson.M{"_id": 0})
+	opts.SetProjection(bson.M{
+		"_id":  0,
+		"data": 0,
+	})
 	cur, err := global.MongoCon.Find(context.Background(), filter, opts)
 	if err != nil {
 		// 记录日志并返回错误信息
@@ -144,7 +149,6 @@ func GetTemplate(c *gin.Context) {
 		e.ResponseWithMsg(c, e.ERROR, "获取文件失败")
 		return
 	}
-
 	e.ResponseSuccess(c, result)
 }
 
@@ -181,7 +185,10 @@ func SearchTemplate(c *gin.Context) {
 	fileter := bson.M{"name": bson.M{"$regex": query}}
 	var result []bson.M
 	find := options.Find()
-	find.SetProjection(bson.M{"_id": 0})
+	find.SetProjection(bson.M{
+		"_id":  0,
+		"data": 0,
+	})
 	cursor, err := global.MongoCon.Find(context.Background(), fileter, find)
 	if err != nil {
 		simple_zap.Logger.Error("查询失败", zap.Error(err))
@@ -189,6 +196,5 @@ func SearchTemplate(c *gin.Context) {
 		return
 	}
 	err = cursor.All(context.Background(), &result)
-
 	e.ResponseSuccess(c, result)
 }

+ 1 - 1
app/e/code_msg.go

@@ -40,7 +40,7 @@ var MsgFlags = map[Rescode]string{
 	JSONParsingFailed:     "json解析失败",
 	ThePhoneNumberIsWrong: "手机号错误",
 	HasSend:               "验证码已发送",
-	AlreadyExists:         "手机号已存在",
+	AlreadyExists:         "文件已存在",
 	PaginationFailed:      "分页查询失败",
 	ErrorFileReadFailed:   "文件获取失败",
 	AnExceptionOccursWhenSendingAnSMSVerificationCode: "发送短信验证码出现异常",

+ 2 - 0
app/router.go

@@ -4,6 +4,7 @@ import (
 	"file_upload/app/controller"
 	middleware "file_upload/app/middlewares"
 	"file_upload/global"
+	"github.com/gin-contrib/static"
 	"github.com/gin-gonic/gin"
 	//swaggerFiles "github.com/swaggo/files"
 	//ginSwagger "github.com/swaggo/gin-swagger"
@@ -14,6 +15,7 @@ func InitRouter() error {
 	//记录日志
 	engine.Use(middleware.Cors())
 	//engine.GET("/swagger/*any", ginSwagger.DisablingWrapHandler(swaggerFiles.Handler, global.SwaggerSetting.Enable))
+	engine.Use(static.Serve("/dwonload/", static.LocalFile("./upload", true)))
 	gin.SetMode(global.ServerSetting.Mode)
 	group := engine.Group("/api")
 	group.Use(middleware.Cors())

+ 2 - 1
go.mod

@@ -19,6 +19,7 @@ require (
 	github.com/fsnotify/fsnotify v1.7.0 // indirect
 	github.com/gabriel-vasile/mimetype v1.4.3 // indirect
 	github.com/gin-contrib/sse v0.1.0 // indirect
+	github.com/gin-contrib/static v1.1.1 // indirect
 	github.com/go-playground/locales v0.14.1 // indirect
 	github.com/go-playground/universal-translator v0.18.1 // indirect
 	github.com/go-playground/validator/v10 v10.19.0 // indirect
@@ -61,7 +62,7 @@ require (
 	golang.org/x/sys v0.19.0 // indirect
 	golang.org/x/text v0.14.0 // indirect
 	google.golang.org/protobuf v1.33.0 // indirect
-	gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f // indirect
+	gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
 	gopkg.in/ini.v1 v1.67.0 // indirect
 	gopkg.in/yaml.v3 v3.0.1 // indirect
 )

+ 4 - 0
go.sum

@@ -25,6 +25,8 @@ github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uq
 github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk=
 github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
 github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
+github.com/gin-contrib/static v1.1.1 h1:XEvBd4DDLG1HBlyPBQU1XO8NlTpw6mgdqcPteetYA5k=
+github.com/gin-contrib/static v1.1.1/go.mod h1:yRGmar7+JYvbMLRPIi4H5TVVSBwULfT9vetnVD0IO74=
 github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg=
 github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU=
 github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s=
@@ -54,6 +56,7 @@ github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa02
 github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM=
 github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
 github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M=
+github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
 github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
 github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
 github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
@@ -184,6 +187,7 @@ google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHh
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU=
 gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
 gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
 gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
 gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=