liuxiaolong
2020-03-05 b823f4e3e3e81666ef7400c87c21684dd6f6de2a
dbperson add car
2个文件已修改
129 ■■■■■ 已修改文件
controllers/fileController.go 123 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
models/dbtablepersons.go 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
controllers/fileController.go
@@ -3,14 +3,15 @@
import (
    "basic.com/dbapi.git"
    "basic.com/fileServer/WeedFSClient.git"
    esApi "basic.com/pubsub/esutil.git"
    "basic.com/pubsub/protomsg.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"
@@ -18,7 +19,6 @@
    "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,有id 则加入底库,无则只上传图片"
// @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这个是uplaodify参数定义中的   '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" {
        fileNameOnly, _, err, faceFeature := 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"] = fileNameOnly
        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)
}
@@ -774,24 +779,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) {
    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,7 +809,7 @@
    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"
    //根据人脸坐标扣出人脸小图
@@ -817,22 +822,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 // 特征值base64 码
    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 // 特征值base64 码
    result := addDbPerson(dbperson)
        result = addDbPerson(dbperson)
    }
    logger.Debug("addDbPerson用时:", time.Since(t1))
    return fileNameOnly, result, nil
    return fileNameOnly, result, nil,faceBase64
}
@@ -889,7 +898,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" {
models/dbtablepersons.go
@@ -14,6 +14,12 @@
    PicDesc      string `json:"picDesc,omitempty" example:"照片标识"`
    Reserved     string `json:"reserved,omitempty" example:"其他"`
    CarNo         string `json:"carNo" example:"车牌号"`
    CarPicUrls     string `json:"carPicUrls" example:"车辆照片"`
    CarType         int     `json:"carType" example:"车辆类型"`
    CarBrand     int     `json:"carBrand" example:"车辆品牌"`
    CarColor     int    `json:"carColor" example:"车辆颜色"`
    FromServerId string `gorm:"column:fromServerId" json:"fromServerId,omitempty" example:"入库serverId"`
}