From 5f6ded24d37303eeb5d195ad7636da7f7fe2bcd5 Mon Sep 17 00:00:00 2001
From: liuxiaolong <736321739@qq.com>
Date: 星期六, 29 六月 2019 13:44:38 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.1.14:10010/r/webserver
---
controllers/camera.go | 21 +++++++
service/CamraUpdatesnashot.go | 145 ++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 166 insertions(+), 0 deletions(-)
diff --git a/controllers/camera.go b/controllers/camera.go
index 9cf2351..20ec0c6 100644
--- a/controllers/camera.go
+++ b/controllers/camera.go
@@ -10,6 +10,7 @@
"basic.com/dbapi.git"
"webserver/extend/code"
"webserver/extend/util"
+ "webserver/service"
)
type CameraController struct{}
@@ -254,6 +255,24 @@
}
}
+// @Summary 鏇存柊搴曞浘
+// @Description 鍒锋柊搴曞浘
+// @Produce json
+// @Tags camera
+// @Param cid path string true "鎽勫儚鏈篿d"
+// @Success 200 {string} json "{"code":200, success:true, msg:"", data:"杩斿洖鐨勬枃浠舵湇鍔″櫒鍦板潃"}"
+// @Failure 500 {string} json "{"code":500, success:false msg:"",data:"閿欒淇℃伅鍐呭"}"
+// @Router /data/api-v/camera/updateSnapshotUrl/{cid} [get]
+func(cc CameraController) UpdateSnapshotUrl(c *gin.Context){
+ cid := c.Param("cid")
+ filename, err := service.UpdateSnapshotUrl(cid)
+ if err != nil {
+ util.ResponseFormat(c, code.ComError, "鏇存柊澶辫触")
+ return
+ }
+ util.ResponseFormat(c, code.Success, filename)
+}
+
type CameraChangeRunVo struct {
CameraIds []string `json:"camera_ids"`
RunType int `json:"run_type"`
@@ -282,3 +301,5 @@
util.ResponseFormat(c, code.ComError, "鏇存柊澶辫触")
}
}
+
+
diff --git a/service/CamraUpdatesnashot.go b/service/CamraUpdatesnashot.go
new file mode 100644
index 0000000..60f2eb7
--- /dev/null
+++ b/service/CamraUpdatesnashot.go
@@ -0,0 +1,145 @@
+package service
+
+import (
+ "fmt"
+ "time"
+ "flag"
+ "os/exec"
+
+ "bytes"
+ "encoding/json"
+ "errors"
+ "io"
+ "log"
+ "mime/multipart"
+ "net/http"
+ "gocv.io/x/gocv"
+ "path/filepath"
+
+ "basic.com/dbapi.git"
+ )
+
+
+func PostFormBufferData(uri string, filepath string, fileName string) (maps map[string]interface{}, err0 error) {
+ // 瑕佹寚瀹氳浆byte鐨勬牸寮�
+ picMat := gocv.IMRead(filepath, gocv.IMReadColor)
+ defer picMat.Close()
+ if picMat.Empty() {
+ return nil, errors.New("file not exist")
+ }
+
+ pheight := picMat.Rows()
+ pwidth := picMat.Cols()
+ pdata := picMat.ToBytes()
+
+ imgs := gocv.NewMat()
+ imgs, _ = gocv.NewMatFromBytes(pheight, pwidth, gocv.MatTypeCV8UC3, pdata)
+ fdata,_ := gocv.IMEncode(".jpg",imgs)
+ body := &bytes.Buffer{}
+ writer := multipart.NewWriter(body)
+ _, err := writer.CreateFormFile("file", fileName)
+ if err != nil {
+ return nil, err
+ }
+ boundary := writer.Boundary()
+ //close_string := fmt.Sprintf("\r\n--%s--\r\n", boundary)
+ close_buf := bytes.NewBufferString(fmt.Sprintf("\r\n--%s--\r\n", boundary))
+ file := bytes.NewBuffer(fdata)
+ request_reader := io.MultiReader(body, file, close_buf)
+ //_, err = io.Copy(part, file)
+ //writer.WriteField(key, val)
+ request, err := http.NewRequest("POST", uri, request_reader)
+ request.Header.Add("Content-Type", writer.FormDataContentType())
+ timeout := time.Duration(5 * time.Second) //瓒呮椂鏃堕棿50ms
+ client := &http.Client{Timeout: timeout}
+ resp, err := client.Do(request)
+ if err != nil {
+ log.Fatal(err)
+ return nil, err
+ }
+ defer func() {
+ if r := recover(); r != nil {
+ fmt.Printf("panic鐨勫唴瀹�%v\n", r)
+ msg := "涓婁紶鍥剧墖鏈嶅姟鍣ㄥ紓甯�"
+ if _, ok := r.(error); ok {
+ msg = r.(error).Error()
+ fmt.Println("panic--recover()寰楀埌鐨勬槸error绫诲瀷")
+ }
+ if _, ok := r.(string); ok {
+ msg = r.(string)
+ fmt.Println("panic--recover()寰楀埌鐨勬槸string绫诲瀷")
+ }
+ err0 = errors.New(msg)
+ }
+ }()
+ defer resp.Body.Close()
+ {
+ body := &bytes.Buffer{}
+ _, err := body.ReadFrom(resp.Body)
+ if err != nil {
+ log.Fatal(err)
+ }
+ fmt.Println(resp.StatusCode)
+ //fmt.Println(resp.Header)
+ fmt.Println(body)
+ //decoder := json.NewDecoder(strings.NewReader(body.String()))
+ decoder := make(map[string]interface{})
+ if err := json.Unmarshal([]byte(body.String()), &decoder); err != nil {
+ return nil, err
+ }
+ return decoder, nil
+ }
+}
+
+
+
+func processphoto(cid string) (local string, err error) {
+ var camApi dbapi.CameraApi
+ caminfo, err := camApi.GetCameraById(cid)
+ _ = caminfo
+ if err != nil {
+ return "", err
+ }
+
+ _, err = exec.LookPath("ffmpeg")
+ if err != nil {
+ return "", nil
+ }
+
+ piclocal := fmt.Sprintf("%s%s.jpg",*storelocal,time.Now().String())
+ cmd := exec.Command("ffmpeg", "-i",caminfo.Rtsp, "-y", "-f", "image2","-t", "0.001","-vf","select='eq(pict_type\\,I)',setpts='N/(25*TB)'", "-s","1920*1080", piclocal)
+
+ err = cmd.Run()
+ if err != nil {
+ return "", err
+ }
+ return piclocal, nil
+}
+
+var storelocal = flag.String("storelcoal","/home/user/workspace/gitblit/", "address of picture produce.")
+var fileurl = flag.String("fileurl","http://192.168.1.182:6333/submit", "url of file server.")
+
+func UpdateSnapshotUrl(cid string)(filename string, err error) {
+ var camApi dbapi.CameraApi
+
+ flag.Parse()
+
+ piclocal, err := processphoto(cid)
+ if err != nil {
+ return "", err
+ }
+
+ resp, err := PostFormBufferData(*fileurl, piclocal, piclocal )
+ if err != nil {
+ fmt.Println(err)
+ return "", err
+ }
+
+ fileurl := resp["fileUrl"].(string)
+ filename = filepath.Base(fileurl)
+ ok := camApi.UpdateSnapshotUrl(cid, filename))
+ if !ok {
+ return "",errors.New("update filelocal to camera fail")
+ }
+ return filename, nil
+}
--
Gitblit v1.8.0