public async Task <IActionResult> SaveHeadImage([FromServices] IHostingEnvironment env, IFormFile files, long userId) { var file = Request.Form.Files[0]; long size = Request.Form.Files.Sum(f => f.Length); var x1 = Request.GetInt("x1", 0); var y1 = Request.GetInt("y1", 0); var w = Request.GetInt("w", 0); var h = Request.GetInt("h", 0); var filePath = string.Format("/Uploads/Images/{0}/{1}/{2}/", DateTime.Now.ToString("yyyy"), DateTime.Now.ToString("MM"), DateTime.Now.ToString("dd")); var qiniuFilePath = string.Format("{0}/{1}/{2}/", DateTime.Now.ToString("yyyy"), DateTime.Now.ToString("MM"), DateTime.Now.ToString("dd")); if (!Directory.Exists(env.WebRootPath + filePath)) { Directory.CreateDirectory(env.WebRootPath + filePath); } if (file != null) { var fileExtension = Path.GetExtension(file.FileName); const string fileFilt = ".gif|.jpg|.jpeg|.png|.webp|"; const string saveSuffix = ".jpeg"; if (fileExtension == null) { return(Json(new StatusMessageData(StatusMessageType.Error, "上传的文件没有后缀"))); } if (fileFilt.IndexOf(fileExtension.ToLower(), StringComparison.Ordinal) <= -1) { return(Json(new StatusMessageData(StatusMessageType.Error, "上传的文件不是图片"))); } if (size > 1024 * 1024 * 2) { return(Json(new StatusMessageData(StatusMessageType.Error, "上传的文件不能大于2M"))); } var strDateTime = DateTime.Now.ToString("yyyyMMddhhmmssfff"); var strRan = Convert.ToString(new Random().Next(100, 999)); var saveName = strDateTime + strRan; var useQiNiu = BuilderContext.Configuration["UseQiNiu"]; var qiniuHost = BuilderContext.Configuration["QiNiuHost"]; string hostPath = WebSiteUtility.MapPhysicsToUrl($"{filePath}{saveName}"); string qiniuHostPath = WebSiteUtility.MapPhysicsToUrl($"{qiniuHost}{qiniuFilePath}{saveName}"); await Task.Factory.StartNew(() => { byte[] cutBytes = ConvertUtility.StreamToBytes(file.OpenReadStream()); Bitmap bitmap = ConvertUtility.BytesToBitmap(cutBytes); var scale = bitmap.Height / 360.00; Bitmap newBitMap = Utility.CutImage(bitmap, Convert.ToInt32(x1 *scale), Convert.ToInt32(y1 *scale), Convert.ToInt32(w *scale), Convert.ToInt32(h *scale)); Bitmap newBitMap100 = Utility.ResizeImage(newBitMap, 100, 100); Bitmap newBitMap50 = Utility.ResizeImage(newBitMap, 50, 50); Bitmap newBitMap30 = Utility.ResizeImage(newBitMap, 30, 30); newBitMap.Save($"{env.WebRootPath}{filePath}{saveName}.jpeg", ImageFormat.Jpeg); newBitMap100.Save($"{env.WebRootPath}{filePath}{saveName}_100x100{saveSuffix}", ImageFormat.Jpeg); newBitMap50.Save($"{env.WebRootPath}{filePath}{saveName}_50x50{saveSuffix}", ImageFormat.Jpeg); newBitMap30.Save($"{env.WebRootPath}{filePath}{saveName}_30x30{saveSuffix}", ImageFormat.Jpeg); }); if (useQiNiu.Equals("true", StringComparison.CurrentCultureIgnoreCase)) { await Task.Run(() => { QiniuManager qiniu = new QiniuManager(); string savekey = $"{qiniuFilePath}{saveName}"; byte[] data = System.IO.File.ReadAllBytes($"{env.WebRootPath}{filePath}{saveName}{saveSuffix}"); qiniu.ByteUpload(data, savekey); }); await Task.Run(() => { QiniuManager qiniu = new QiniuManager(); string savekey = $"{qiniuFilePath}{saveName}_100x100"; byte[] data = System.IO.File.ReadAllBytes($"{env.WebRootPath}{filePath}{saveName}_100x100{saveSuffix}"); qiniu.ByteUpload(data, savekey); }); await Task.Run(() => { QiniuManager qiniu = new QiniuManager(); string savekey = $"{qiniuFilePath}{saveName}_50x50"; byte[] data = System.IO.File.ReadAllBytes($"{env.WebRootPath}{filePath}{saveName}_50x50{saveSuffix}"); qiniu.ByteUpload(data, savekey); }); await Task.Run(() => { QiniuManager qiniu = new QiniuManager(); string savekey = $"{qiniuFilePath}{saveName}_30x30"; byte[] data = System.IO.File.ReadAllBytes($"{env.WebRootPath}{filePath}{saveName}_30x30{saveSuffix}"); qiniu.ByteUpload(data, savekey); }); } User user = userService.GetFullUser(userId); if (useQiNiu.Equals("true", StringComparison.CurrentCultureIgnoreCase)) { user = membershipService.SetHeadImage(user, $"{qiniuHost}{qiniuFilePath}{saveName}"); } else { user = membershipService.SetHeadImage(user, $"{Request.Scheme}://{Request.Host}{filePath}{saveName}{saveSuffix}"); } if (user != null) { HttpContext.Session.Set <User>(user.UserId.ToString(), user); } return(Json(new StatusMessageData(StatusMessageType.Success, "上传成功"))); } return(Json(new StatusMessageData(StatusMessageType.Error, "上传失败"))); }