コード例 #1
0
        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, "上传失败")));
        }