From 84c06596cae48dfca5b8c9eea206e0f540df1a8b Mon Sep 17 00:00:00 2001
From: liuxiaolong <liuxiaolong@aiotlink.com>
Date: 星期二, 09 六月 2020 12:41:42 +0800
Subject: [PATCH] fix sdk download md5
---
controllers/fileController.go | 180 ++++++++++++++++++++++++++++++++++-------------------------
1 files changed, 103 insertions(+), 77 deletions(-)
diff --git a/controllers/fileController.go b/controllers/fileController.go
index 80c6b99..ad9a211 100644
--- a/controllers/fileController.go
+++ b/controllers/fileController.go
@@ -3,22 +3,22 @@
import (
"basic.com/dbapi.git"
"basic.com/fileServer/WeedFSClient.git"
+ esApi "basic.com/pubsub/esutil.git"
"basic.com/pubsub/protomsg.git"
+ "basic.com/valib/godraw.git"
+ "basic.com/valib/logger.git"
"bytes"
"encoding/base64"
"encoding/json"
"errors"
"fmt"
"github.com/gin-gonic/gin"
- "github.com/satori/go.uuid"
- "gocv.io/x/gocv"
"image"
"image/color"
"image/jpeg"
"io/ioutil"
"log"
"mime/multipart"
- "net/http"
"path"
"sort"
"strconv"
@@ -29,11 +29,9 @@
"webserver/extend/code"
"webserver/extend/config"
"webserver/extend/esutil"
- "basic.com/valib/logger.git"
"webserver/extend/util"
"webserver/models"
"webserver/service"
- esApi "basic.com/pubsub/esutil.git"
)
type FileController struct {
@@ -51,57 +49,64 @@
//var weedfsUri = "http://192.168.1.182:9500/submit"
// @Security ApiKeyAuth
-// @Summary 渚濇嵁鍥剧墖娣诲姞搴曞簱浜哄憳
-// @Description 渚濇嵁鍥剧墖娣诲姞搴曞簱杩斿洖鏁版嵁浜哄憳
+// @Summary 鍥剧墖涓婁紶
+// @Description 鍥剧墖涓婁紶
// @Accept multipart/form-data
// @Produce json
-// @Tags dbperson 搴曞簱浜哄憳
-// @Param file formData file true "搴曞簱浜哄憳鍥剧墖"
-// @Param tableId formData string false "搴曞簱id,鏈塱d 鍒欏姞鍏ュ簳搴擄紝鏃犲垯鍙笂浼犲浘鐗�"
-// @Success 200 {string} json "{"code":200, msg:"鐩綍缁撴瀯鏁版嵁", success:true}"
-// @Failure 500 {string} json "{"code":500, msg:"杩斿洖閿欒淇℃伅", success:false}"
+// @Tags 鍥剧墖涓婁紶
+// @Param file formData file true "鍥剧墖"
+// @Param picType formData string true "鍥剧墖绫诲瀷锛�0锛氳溅杈嗙収鐗囷紝1锛氫汉鑴哥収鐗�"
+// @Success 200 {string} json "{"code":200, msg:"", success:true}"
+// @Failure 500 {string} json "{"code":500, msg:"", success:false}"
// @Router /data/api-v/dbperson/fileupload [POST]
func (fc FileController) Fileupload(c *gin.Context) {
//寰楀埌涓婁紶鐨勬枃浠�
file, header, err := c.Request.FormFile("file") //image杩欎釜鏄痷plaodify鍙傛暟瀹氫箟涓殑 'fileObjName':'image'
- tableId := c.Request.FormValue("tableId")
- if err != nil {
- c.String(http.StatusBadRequest, "Bad request")
+ picType := c.Request.FormValue("picType") //鍥剧墖绫诲瀷
+ if err != nil || (picType != "0" && picType != "1") {
+ util.ResponseFormat(c, code.RequestParamError, "鍙傛暟鏈夎")
return
}
//鏂囦欢鐨勫悕绉�
filename := header.Filename
- fmt.Println(file, err, filename)
- if err != nil {
- log.Fatal(err)
- filename = uuid.NewV4().String()
- }
- // fastdfs
- {
- //fileSuffix := path.Ext(filename)[1:] //鑾峰彇鏂囦欢鍚庣紑
- //fmt.Println("鏂囦欢鍚庣紑 =", fileSuffix)
- //data, _ := ioutil.ReadAll(file)
- // fastdfs 涓婁紶 鏆傚簾寮�
- //field := fdfsclient.UploadFileByBuffer(data, fileSuffix)
- }
- fileNameOnly, result, err := uploadFileReturnAddr(file, filename, tableId)
- if err != nil {
- if err.Error() == "NotFeatureFindError" {
- util.ResponseFormat(c, code.NotFeatureFindError, filename)
- } else {
- util.ResponseFormat(c, code.ServiceInsideError, err.Error())
+ var result = make(map[string]string)
+ if picType == "1" {
+ _, _, err, faceFeature, faceUrlPath := uploadFileReturnAddr(file, filename, "", false)
+ if err != nil {
+ if err.Error() == "NotFeatureFindError" {
+ util.ResponseFormat(c, code.NotFeatureFindError, filename)
+ } else {
+ util.ResponseFormat(c, code.ServiceInsideError, err.Error())
+ }
+ return
}
- return
- }
- if tableId != "" { // 涓婁紶
- if result["success"].(bool) {
- util.ResponseFormat(c, code.Success, result["data"])
- } else {
- util.ResponseFormat(c, code.ServiceInsideError, result["data"])
- }
+ result["picUrl"] = faceUrlPath
+ result["faceFeature"] = faceFeature
} else {
- util.ResponseFormat(c, code.Success, fileNameOnly)
+ localConf, err2 := cache.GetServerInfo()
+ if err2 !=nil || localConf.WebPicIp == "" {
+ logger.Debug("localConfig is wrong!!!")
+ util.ResponseFormat(c,code.ComError,"")
+ return
+ }
+ defer file.Close()
+ // weedfs 涓婁紶
+ fileBytes, err := ioutil.ReadAll(file)
+ if err !=nil {
+ util.ResponseFormat(c,code.ComError,"")
+ return
+ }
+ var weedfsUri = "http://"+localConf.WebPicIp+":"+strconv.Itoa(int(localConf.WebPicPort))+"/submit?collection=persistent"
+ weedFilePath, e := WeedFSClient.UploadFile(weedfsUri, filename, fileBytes)
+ if e != nil {
+ logger.Debug("WeedFSClient.UploadFile err:", e)
+ util.ResponseFormat(c,code.ComError,"UploadFile err")
+ return
+ }
+ result["picUrl"] = weedFilePath
}
+
+ util.ResponseFormat(c, code.Success, result)
}
@@ -132,7 +137,7 @@
logger.Debug("localConfig is wrong!!!")
return
}
- var weedfsUri = "http://"+localConf.WebPicIp+":"+strconv.Itoa(int(localConf.WebPicPort))+"/submit"
+ var weedfsUri = "http://"+localConf.WebPicIp+":"+strconv.Itoa(int(localConf.WebPicPort))+"/submit?collection=persistent"
logger.Debug("weedfsUri:",weedfsUri)
resultMap :=make(map[string]interface{},0)
//灏嗕笂浼犵殑鍥剧墖浜や汉鑴告娴嬪拰浜鸿劯鎻愬彇锛岃幏寰楃壒寰�
@@ -143,7 +148,11 @@
urlArr := make([]string,0)
for _,r := range faceArr {
rcFace := r.Pos.RcFace
- cutFaceImgData := util.SubImg(*pI, int(rcFace.Left), int(rcFace.Top), int(rcFace.Right), int(rcFace.Bottom))
+ cutFaceImgData,cutErr := util.SubCutImg(pI, rcFace, 20)
+ if cutErr != nil {
+ logger.Debug("util.SubCutImg err:", cutErr)
+ continue
+ }
weedFilePath, e := WeedFSClient.UploadFile(weedfsUri, "FaceUrl", cutFaceImgData)
if e == nil{
faceExtractedMap[weedFilePath] = FaceExtract{
@@ -166,19 +175,25 @@
}
func drawPolygonOnImg(i *protomsg.Image,faceArr *[]*protomsg.ResultFaceDetect) (*[]byte,error) {
- rook, _ := gocv.NewMatFromBytes(int(i.Height), int(i.Width), gocv.MatTypeCV8UC3, i.Data)
- defer rook.Close()
- //yellow := color.RGBA{255, 255, 0, 0}
+ img,err := godraw.ToImage(i.Data, int(i.Width), int(i.Height))
+ if err != nil {
+ return nil,err
+ }
red := color.RGBA{255, 0, 0, 0}
for _,faceResult := range *faceArr {
- left := int(faceResult.Pos.RcFace.Left)
- top := int(faceResult.Pos.RcFace.Top)
- right := int(faceResult.Pos.RcFace.Right)
- bottom := int(faceResult.Pos.RcFace.Bottom)
- gocv.Rectangle(&rook, image.Rect(left,top,right,bottom), red, 1)
+ rect := image.Rect(int(faceResult.Pos.RcFace.Left),
+ int(faceResult.Pos.RcFace.Top),
+ int(faceResult.Pos.RcFace.Right),
+ int(faceResult.Pos.RcFace.Bottom))
+ err = godraw.DrawRectangle(img, rect, red, 3)
+ if err != nil {
+ logger.Debug("godraw.DrawRectangle err:", err)
+ }
}
- fData,err := gocv.IMEncode(".jpg", rook)
- return &fData,err
+
+ quantity := 100
+ jpgData, err := godraw.ImageToJpeg(img, &quantity)
+ return &jpgData,err
}
type CompareResult struct {
@@ -403,12 +418,12 @@
logger.Debug("localConfig is wrong!!!")
return nil,"",nil,errors.New("localConf err")
}
- var weedfsUri = "http://"+localConf.WebPicIp+":"+strconv.Itoa(int(localConf.WebPicPort))+"/submit"
+ var weedfsUri = "http://"+localConf.WebPicIp+":"+strconv.Itoa(int(localConf.WebPicPort))+"/submit?collection=persistent"
logger.Debug("weedfsUri:",weedfsUri)
faceArr, err, pI := service.GetFaceFeaFromSdk(fileBytes, time.Second*60)
if err ==nil && len(faceArr) ==1 {
rcFace := faceArr[0].Pos.RcFace
- cutFaceImgData := util.SubImg(*pI, int(rcFace.Left), int(rcFace.Top), int(rcFace.Right), int(rcFace.Bottom))
+ cutFaceImgData,_ := util.SubCutImg(pI, rcFace, 20)
weedFilePath, e := WeedFSClient.UploadFile(weedfsUri, "FaceUrl", cutFaceImgData)
if e == nil{
faceExtractedMap[weedFilePath] = FaceExtract{
@@ -487,6 +502,9 @@
return
}
faceB = decodeF
+ } else {
+ util.ResponseFormat(c, code.ComError, "鏈潯浜鸿劯鎶撴媿鐗瑰緛涓虹┖锛岃妫�鏌�")
+ return
}
}
@@ -742,7 +760,7 @@
logger.Debug("localConfig is wrong!!!")
return
}
- var weedfsUri = "http://"+localConf.WebPicIp+":"+strconv.Itoa(int(localConf.WebPicPort))+"/submit"
+ var weedfsUri = "http://"+localConf.WebPicIp+":"+strconv.Itoa(int(localConf.WebPicPort))+"/submit?collection=persistent"
//灏嗕笂浼犵殑鍥剧墖浜や汉鑴告娴嬪拰浜鸿劯鎻愬彇锛岃幏寰楃壒寰�
fileBytes, _ := ioutil.ReadAll(file)
@@ -756,7 +774,7 @@
break
}
//鏍规嵁浜鸿劯鍧愭爣鎵e嚭浜鸿劯灏忓浘
- cutFaceImgData := util.SubImg(*pI, int(rcFace.Left), int(rcFace.Top), int(rcFace.Right), int(rcFace.Bottom))
+ cutFaceImgData,_ := util.SubCutImg(pI, rcFace, 20)
weedFilePath, e := WeedFSClient.UploadFile(weedfsUri, "testCutFace", cutFaceImgData)
if e !=nil{
util.ResponseFormat(c,code.ComError,"鏂囦欢涓婁紶澶辫触")
@@ -774,24 +792,24 @@
log.Fatalln(err)
}*/
-func uploadFileReturnAddr(file multipart.File, filename string, tableId string) (string, map[string]interface{}, error) {
+func uploadFileReturnAddr(file multipart.File, filename string, tableId string, add2Db bool) (string, map[string]interface{}, error, string, string) {
defer file.Close()
// weedfs 涓婁紶
fileBytes, err := ioutil.ReadAll(file)
if err !=nil {
- return "",nil,err
+ return "",nil,err,"",""
}
//灏嗕笂浼犵殑鍥剧墖浜や汉鑴告娴嬪拰浜鸿劯鎻愬彇锛岃幏寰楃壒寰�
var faceBase64=""
faceArr, err, pI := service.GetFaceFeaFromSdk(fileBytes, time.Second*5)
if faceArr ==nil {
- return "",nil,errors.New("NotFeatureFindError")
+ return "",nil,errors.New("NotFeatureFindError"),"",""
}
var rcFace *protomsg.Rect
if err ==nil && len(faceArr) >0 {
if len(faceArr) >1 {
- return "",nil, errors.New("TooManyFaces")
+ return "",nil, errors.New("TooManyFaces"),"",""
}
for _,r := range faceArr {
//鎷垮埌浜鸿劯鐨勫潗鏍�
@@ -804,12 +822,16 @@
localConf, err2 := cache.GetServerInfo()
if err2 !=nil || localConf.WebPicIp == "" {
logger.Debug("localConfig is wrong!!!")
- return "",nil,err2
+ return "",nil,err2,"",""
}
var weedfsUri = "http://"+localConf.WebPicIp+":"+strconv.Itoa(int(localConf.WebPicPort))+"/submit?collection=persistent"
//鏍规嵁浜鸿劯鍧愭爣鎵e嚭浜鸿劯灏忓浘
t1 := time.Now()
- cutFaceImgData := util.SubImg(*pI, int(rcFace.Left), int(rcFace.Top), int(rcFace.Right), int(rcFace.Bottom))
+ cutFaceImgData,cutErr := util.SubCutImg(pI, rcFace, 20)
+ if cutErr != nil {
+ logger.Debug("util.SubCutImg err:", cutErr)
+ return "", nil, cutErr,"",""
+ }
logger.Debug("SubImg鐢ㄦ椂锛�", time.Since(t1))
t1 = time.Now()
weedFilePath, e := WeedFSClient.UploadFile(weedfsUri, filename, cutFaceImgData)
@@ -817,22 +839,26 @@
t1 = time.Now()
if e != nil {
logger.Debug("WeedFSClient.UploadFile err:", e)
- return "", nil, e
+ return "", nil, e,"",""
}
ext := path.Ext(filename)
fileNameOnly := strings.TrimSuffix(filename, ext)
- dbperson := new(models.Dbtablepersons)
- dbperson.PersonPicUrl = weedFilePath // 鍥剧墖璺粡
- dbperson.TableId = tableId //
- dbperson.PersonName = fileNameOnly // 鍥剧墖鍚�
- dbperson.Enable = 1 //榛樿鏈夋晥
- dbperson.FaceFeature = faceBase64 // 鐗瑰緛鍊糱ase64 鐮�
+ var result map[string]interface{}
+ if add2Db {
+ dbperson := new(models.Dbtablepersons)
+ dbperson.PersonPicUrl = weedFilePath // 鍥剧墖璺粡
+ dbperson.TableId = tableId //
+ dbperson.PersonName = fileNameOnly // 鍥剧墖鍚�
+ dbperson.Enable = 1 //榛樿鏈夋晥
+ dbperson.FaceFeature = faceBase64 // 鐗瑰緛鍊糱ase64 鐮�
- result := addDbPerson(dbperson)
- logger.Debug("addDbPerson鐢ㄦ椂锛�", time.Since(t1))
- return fileNameOnly, result, nil
+ result = addDbPerson(dbperson)
+ }
+
+ logger.Debug("addDbPerson鐢ㄦ椂锛�", time.Since(t1), "result:", result)
+ return fileNameOnly, result, nil,faceBase64, weedFilePath
}
@@ -889,7 +915,7 @@
lock.Unlock()
return
}
- field, _, err1 := uploadFileReturnAddr(file, filename, tableId)
+ field, _, err1,_,_ := uploadFileReturnAddr(file, filename, tableId, true)
lock.Lock()
if err1 != nil || field == "" {
if err1 !=nil && err1.Error() == "NotFeatureFindError" {
@@ -966,7 +992,7 @@
logger.Debug("localConfig is wrong!!!")
return
}
- var weedfsUri = "http://"+localConf.WebPicIp+":"+strconv.Itoa(int(localConf.WebPicPort))+"/submit"
+ var weedfsUri = "http://"+localConf.WebPicIp+":"+strconv.Itoa(int(localConf.WebPicPort))+"/submit?collection=persistent"
{
uri := weedfsUri
fileInfo, e := esutil.PostFormBufferData(uri, filename, "file", uploadData)
--
Gitblit v1.8.0