/// <summary>
        /// 识别到人后上传图片和用户信息
        /// </summary>
        /// <param name="siteId"></param>
        /// <param name="id"></param>
        /// <param name="score"></param>
        /// <returns></returns>
        public async Task <JsonResult> UploadFaceForUserResult(string siteId, string id, string name, string score)
        {
            try
            {
                var files = HttpContextCore.Current.Request.Form.Files;
                if (files.Count != 2)
                {
                    return(Json(new { Code = 2, Msg = "请上传图片!" }));
                }

                string file1 = HttpContextCore.MapPath(string.Format("/uploadfiles/FaceResult/{0}/{1:yyyy}/{1:yyyyMMdd}/users/{1:HHmmssfff}_{2}_{3}_full.jpg", siteId, DateTime.Now, name, score));
                string file2 = HttpContextCore.MapPath(string.Format("/uploadfiles/FaceResult/{0}/{1:yyyy}/{1:yyyyMMdd}/users/{1:HHmmssfff}_{2}_{3}_cut.jpg", siteId, DateTime.Now, name, score));

                if (!Directory.Exists(Path.GetDirectoryName(file1)))
                {
                    Directory.CreateDirectory(Path.GetDirectoryName(file1));
                }

                using (var stream = System.IO.File.Create(file1))
                    await files[0].CopyToAsync(stream);
                using (var stream = System.IO.File.Create(file2))
                    await files[1].CopyToAsync(stream);

                return(Json(new { Code = 0, Msg = "保存成功!" }));
            }
            catch (Exception ex)
            {
                LogHelper.SaveLog(ex);
                return(Json(new { Code = 1, Msg = "服务器异常,请联系管理员!" }));
            }
        }
        public ActionResult Download()
        {
            string fileURL = Request.Query["fileURL"];

            if (fileURL.StartsWith("http"))
            {
                return(File(new WebClient().DownloadData(fileURL), "application/octet-stream", Path.GetFileName(fileURL)));
            }
            else
            {
                string     fileName = Path.GetFileName(fileURL);
                FileStream fs       = new FileStream(HttpContextCore.MapPath(fileURL), FileMode.Open);
                return(File(fs, "application/octet-stream", fileName));
            }
        }
        /// <summary>
        /// 添加人脸特征,更新客户端用户人脸特征库
        /// </summary>
        public static void AddUserFace(SysUser user)
        {
            DataContext dbContext = new DataContext();

            var faceFeature = FaceCompareHelper.ExtractFeature(HttpContextCore.MapPath(user.UserImage));

            if (string.IsNullOrEmpty(faceFeature))
            {
                return;
            }

            //保存人脸特征
            var feature = dbContext.Set <SysUserFaceFeature>().FirstOrDefault(x => x.UserId == user.UserId);

            if (feature == null)
            {
                feature = new SysUserFaceFeature
                {
                    UserId          = user.UserId,
                    UserName        = user.UserName,
                    UserType        = "User",
                    FaceImage       = user.UserImage,
                    FaceFeature     = faceFeature,
                    FaceFeatureType = "",
                    FaceTimeOut     = DateTime.Now.AddYears(100),
                    CreateTime      = DateTime.Now,
                    UpdateTime      = DateTime.Now
                };
                dbContext.Set <SysUserFaceFeature>().Add(feature);
            }
            else
            {
                feature.UserName    = user.UserName;
                feature.FaceImage   = user.UserImage;
                feature.FaceFeature = faceFeature;
                feature.UpdateTime  = DateTime.Now;
            }

            //更新客户端队列(根据业务修改)
            var data = new Dictionary <string, string>
            {
                ["ActionName"]  = "AddFace",
                ["Id"]          = user.UserId.ToString(),
                ["Name"]        = user.UserName,
                ["ImageUrl"]    = user.UserImage,
                ["FaceFeature"] = faceFeature,
                ["TimeOut"]     = DateTime.Now.AddYears(100).ToString()
            };

            SysQueue queue = new SysQueue
            {
                Id             = Guid.NewGuid(),
                ClientId       = user.DepartmentId.ToString(),
                ActionName     = "AddFace",
                ActionObjectId = user.UserId.ToString(),
                ActionData     = JsonConvert.SerializeObject(data),
                CreateTime     = DateTime.Now
            };

            dbContext.Set <SysQueue>().Add(queue);
            dbContext.SaveChanges();
        }
        public async Task <JsonResult> Upload()
        {
            try
            {
                IFormFile file = Request.Form.Files[0];

                Guid     fileId  = Guid.NewGuid();
                DateTime nowDate = DateTime.Now;
                string   path    = string.Format("/uploadfiles/{0:yyyy/MMdd}/{1}", nowDate, fileId);
                string   url     = string.Format("{0}/{1}", path, file.FileName);
                // 服务器的存储全路径
                string destFileName = HttpContextCore.MapPath(url);
                // 创建目录路径
                if (!Directory.Exists(Path.GetDirectoryName(destFileName)))
                {
                    Directory.CreateDirectory(Path.GetDirectoryName(destFileName));
                }

                SysAttachment fileData = new SysAttachment();
                fileData.Id = fileId;
                //fileDatas.RelationID = "";
                fileData.Name         = file.FileName;
                fileData.Names        = "";
                fileData.Url          = url;
                fileData.Type         = 0;
                fileData.Suffix       = Path.GetExtension(file.FileName).ToLower();
                fileData.Path         = path;
                fileData.Status       = 0;
                fileData.Size         = 0;
                fileData.CreateBy     = "";
                fileData.CreateByName = SSOClient.User.UserName;
                fileData.CreateTime   = nowDate;

                string ThumbnailSizes = Request.Form["thumbnailSizes"].FirstOrDefault();
                if (isLocal)
                {
                    //保存本地
                    using (var stream = System.IO.File.Create(destFileName))
                    {
                        await file.CopyToAsync(stream);
                    }
                    // 图片文件扩展名验证正则表达式
                    Regex regexExtension = new Regex(@".*\.(jpg|jpeg|png|gif|bmp)");
                    if (regexExtension.IsMatch(destFileName.ToLower()))
                    {
                        string[] ThumbnailSizeArr = new string[] { };
                        //生成缩略图
                        if (!string.IsNullOrEmpty(ThumbnailSizes) && (ThumbnailSizeArr = ThumbnailSizes.Split(';')).Length > 0)
                        {
                            string[] fileNamesArr = new string[ThumbnailSizeArr.Length];
                            for (int i = 0; i < ThumbnailSizeArr.Length; i++)
                            {
                                string size          = ThumbnailSizeArr[i];
                                string ThumbFileName = Path.GetFileNameWithoutExtension(url) + "_" + size + fileData.Suffix;
                                string ThumbPath     = url.Replace(Path.GetFileName(url), ThumbFileName);
                                ThumbnailHelper.MakeThumbnail(Convert.ToInt32(size), HttpContextCore.MapPath(url), HttpContextCore.MapPath(ThumbPath));
                                fileNamesArr[i] = ThumbFileName;
                            }
                            fileData.Names = string.Join("|", fileNamesArr);
                        }
                    }
                }
                else
                {
                    //保存文件服务器
                    HttpClient client             = new HttpClient();
                    MultipartFormDataContent form = new MultipartFormDataContent();

                    byte[] uploadFileBytes = new byte[file.Length];
                    file.OpenReadStream().Read(uploadFileBytes, 0, (int)file.Length);
                    MemoryStream  stream      = new MemoryStream(uploadFileBytes);
                    StreamContent fileContent = new StreamContent(stream);
                    fileContent.Headers.ContentType                 = new MediaTypeHeaderValue("application/octet-stream");
                    fileContent.Headers.ContentDisposition          = new ContentDispositionHeaderValue("form-data");
                    fileContent.Headers.ContentDisposition.FileName = url;
                    form.Add(fileContent);

                    StringContent thumbnailSizes = new StringContent(ThumbnailSizes);
                    thumbnailSizes.Headers.ContentDisposition      = new ContentDispositionHeaderValue("form-data");
                    thumbnailSizes.Headers.ContentDisposition.Name = "thumbnailSizes";
                    form.Add(thumbnailSizes);

                    HttpResponseMessage res = client.PostAsync(fileServer, form).Result;
                    var     json            = res.Content.ReadAsStringAsync().Result;
                    JObject result          = JObject.Parse(json);

                    fileData.Path  = (string)result["data"]["path"];
                    fileData.Names = (string)result["data"]["names"];
                    fileData.Url   = (string)result["data"]["url"];
                }
                return(Json(new { Code = 0, Msg = "", Data = fileData }));
            }
            catch (Exception ex)
            {
                LogHelper.SaveLog(ex);
                return(Json(new { Code = 1, Msg = "服务器异常,请联系管理员!" }));
            }
        }