.net code 上传文件、图片等比缩放、获取表单数据(后台代码 )

关键点说明:

1 要引用:System.Drawing.Common

2 获取文件  IFormFile file = Request.Form.Files.FirstOrDefault();

获取表单数据 Request.Form["minfotype"].FirstOrDefault();

根据业务需求计算 新图片大小。一些是等比。我这里是设置了最大的宽度,如果大于就缩小。不然不处理。 

if (objImage.Width > imgMaxWidth)//原始图片比目标位宽

IFormFile转Image 

using (var memoryStream = new MemoryStream())
                {
                    await file.CopyToAsync(memoryStream);
                    objImage = System.Drawing.Image.FromStream(memoryStream);
                }

6 新图片保存

Bitmap outBmp = new Bitmap(desWidth, desHeight);
                Graphics g = Graphics.FromImage(outBmp);
                g.Clear(Color.Transparent);
                // 设置画布的描绘质量   
                g.CompositingQuality = CompositingQuality.HighQuality;
                g.SmoothingMode = SmoothingMode.HighQuality;
                g.InterpolationMode = InterpolationMode.HighQualityBicubic;
                g.DrawImage(objImage, new Rectangle(0, 0, desWidth, desHeight + 1), 0, 0, objImage.Width, objImage.Height, GraphicsUnit.Pixel);
                outBmp.Save(savePath, objImage.RawFormat);
                g.Dispose();
                outBmp.Dispose();

/// <summary>
        /// 更新
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        //[DisableRequestSizeLimit]
        [RequestSizeLimit(800_000_000)]//限制800M左右
        public async Task<ActionResult> UploadFile()
        {

            var uwer = base.GetUserLoginInfo();
            var _folder = $@"/Upload";//env 可通过Controller的参数传入,并取得:IHostingEnvironment _env
     
            var minfotype = Request.Form["minfotype"].FirstOrDefault();//特殊业务类型 changeimgsize 等比缩放
            var minfodata = Request.Form["minfodata"].FirstOrDefault();//特殊业务相关数据

            IFormFile file = Request.Form.Files.FirstOrDefault();
            List<FileInfo> fileInfos = new List<FileInfo>();
            if (file.Length > 0)
            {
                string fileId = Guid.NewGuid().ToString();
                var dirPath = _folder + $"/Template/{fileId}";
                if (!Directory.Exists(_env.WebRootPath + dirPath))
                {
                    Directory.CreateDirectory(_env.WebRootPath + dirPath);
                }
                var filePath = $@"{dirPath}/{file.FileName}";

                var hasSave =false;
                if (minfotype == "changeimgsize")
                {
                    hasSave = await GetImageSizeAsync(file, int.Parse(minfodata), _env.WebRootPath + filePath);
                }
                if (!hasSave)
                {
                    using (var stream = new FileStream(_env.WebRootPath + filePath, FileMode.Create))
                    {
                        await file.CopyToAsync(stream);//写入到服务器。
                    }
                }
                var fileinfo = new FileInfo();
                fileinfo.FileId = fileId;
                fileinfo.FilePath = filePath;
                fileInfos.Add(fileinfo);
            }

            return Ok(fileInfos);
        }
        /// <summary>
        ///  检测并保存图片
        /// </summary>
        /// <param name="file"></param>
        /// <param name="imgMaxWidth"></param>
        /// <returns></returns>
        public static async Task<bool> GetImageSizeAsync(IFormFile file, int imgMaxWidth, string savePath)
        {
            try
            {
                if (!file.ContentType.StartsWith("image")) return false;
                System.Drawing.Image objImage;
                using (var memoryStream = new MemoryStream())
                {
                    await file.CopyToAsync(memoryStream);
                    objImage = System.Drawing.Image.FromStream(memoryStream);
                }

                int desWidth = 0; int desHeight = 0;//目标宽高
                if (objImage.Width > imgMaxWidth)//原始图片比目标位宽
                {
                    decimal radioAct = (decimal)objImage.Width / (decimal)objImage.Height;//原始图片的宽高比
                    desWidth = imgMaxWidth;
                    desHeight = (int)((decimal)imgMaxWidth / radioAct);
                }
                else
                { return false; }

                Bitmap outBmp = new Bitmap(desWidth, desHeight);
                Graphics g = Graphics.FromImage(outBmp);
                g.Clear(Color.Transparent);
                // 设置画布的描绘质量   
                g.CompositingQuality = CompositingQuality.HighQuality;
                g.SmoothingMode = SmoothingMode.HighQuality;
                g.InterpolationMode = InterpolationMode.HighQualityBicubic;
                g.DrawImage(objImage, new Rectangle(0, 0, desWidth, desHeight + 1), 0, 0, objImage.Width, objImage.Height, GraphicsUnit.Pixel);
                outBmp.Save(savePath, objImage.RawFormat);
                g.Dispose();
                outBmp.Dispose();
                objImage.Dispose();
                return true;
            }
            catch (Exception e)
            { return false; }

        }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值