From 4cb74495ff756ac97f3ce6a846951f4bdb317aec Mon Sep 17 00:00:00 2001
From: zhangzengfei <zhangzengfei@smartai.com>
Date: 星期四, 20 六月 2024 19:09:31 +0800
Subject: [PATCH] 添加大图转url

---
 config/config.go         |    5 +-
 controller/captureCtl.go |   25 ++++++++++++
 util/file.go             |   31 +++++++++++++++
 3 files changed, 59 insertions(+), 2 deletions(-)

diff --git a/config/config.go b/config/config.go
index cebb37e..880e41e 100644
--- a/config/config.go
+++ b/config/config.go
@@ -51,8 +51,9 @@
 }
 
 type image struct {
-	CutFaceImage bool `mapstructure:"cut-face-image"`
-	Enlarge      int  `mapstructure:"enlarge"`
+	CutFaceImage   bool   `mapstructure:"cut-face-image"`
+	Enlarge        int    `mapstructure:"enlarge"`
+	ImageUriPrefix string `mapstructure:"url-prefix"`
 }
 
 // 姊帶璁惧
diff --git a/controller/captureCtl.go b/controller/captureCtl.go
index 7e53382..6f05687 100644
--- a/controller/captureCtl.go
+++ b/controller/captureCtl.go
@@ -3,8 +3,10 @@
 import (
 	"encoding/base64"
 	"fmt"
+	"gat1400Exchange/util"
 	"math/rand"
 	"net/http"
+	"path"
 	"strconv"
 	"time"
 
@@ -46,6 +48,29 @@
 	face := req.FaceListObject.FaceObject[0]
 	logger.Debug("Receive new face message, ip:%s, device id:%s faceId:%s, LeftTopX:%d, appearTime:%s", c.RemoteIP(), face.DeviceID, face.FaceID, face.LeftTopX, face.FaceAppearTime)
 
+	if config.ClientConf.UploadType == "url" {
+		for idx, img := range face.SubImageList.SubImageInfoObject {
+			if img.Type != "14" {
+				continue
+			}
+
+			imageBytes, err := base64.StdEncoding.DecodeString(img.Data)
+			if err != nil {
+				logger.Warn("Decode Small Image Base64 String failure, %s", err.Error())
+				c.AbortWithStatus(http.StatusBadRequest)
+				return
+			}
+
+			today := time.Now().Format("2006-01-02")
+			imagePath := path.Join(config.LogConf.Path, "gat1400_face_images", today, img.ImageID+".jpeg")
+			err = util.WriteToFile(imagePath, imageBytes)
+			if err != nil {
+				face.SubImageList.SubImageInfoObject[idx].Data = ""
+				face.SubImageList.SubImageInfoObject[idx].StoragePath = config.ImageConf.ImageUriPrefix + "/" + today + "/" + img.ImageID + ".jpeg"
+			}
+		}
+	}
+
 	// 濡傛灉寮�鍚簡涓嬬骇, 韬唤搴旇鏄秷鎭唬鐞�, 涓嶅啀杞彂鍒版湇鍔″櫒
 	if config.ClientConf.Enable && config.ServeConf.Role == "agent" {
 		go a.Repository.VIIDFaceMsgForward(&req)
diff --git a/util/file.go b/util/file.go
new file mode 100644
index 0000000..875628e
--- /dev/null
+++ b/util/file.go
@@ -0,0 +1,31 @@
+package util
+
+import (
+	"fmt"
+	"io/ioutil"
+	"os"
+	"path/filepath"
+)
+
+func WriteToFile(path string, data []byte) error {
+	dir := filepath.Dir(path)
+
+	_, err := os.Stat(dir)
+	if os.IsNotExist(err) {
+		err := os.MkdirAll(dir, 0755)
+		if err != nil {
+			return fmt.Errorf("failed to create directory: %v", err)
+		}
+	} else if err != nil {
+		// 鍏朵粬閿欒
+		return fmt.Errorf("failed to check directory status: %v", err)
+	}
+
+	// 鍐欏叆鏁版嵁鍒版枃浠�
+	err = ioutil.WriteFile(path, data, 0644)
+	if err != nil {
+		return fmt.Errorf("failed to write to file: %v", err)
+	}
+
+	return nil
+}

--
Gitblit v1.8.0