zoukankan      html  css  js  c++  java
  • 图片上传处理Server端

     public ActionResult Upload()
            {
                HttpPostedFileBase file = Request.Files["Fdata"];//接受文件数据
                string FileName = Path.GetFileName(file.FileName);//获取文件名
                string FileExt = Path.GetExtension(FileName);//获取扩展名
                if (FileExt == ".jpg")
                {
                    //file.SaveAs(Request.MapPath("/UploadFile/" + FileName));
                    string dir = "/UploadFile/" + DateTime.Now.Year + "/" + DateTime.Now.Month + "/" + DateTime.Now.Day + "/";
                    Directory.CreateDirectory(Request.MapPath(dir));//创建文件夹
                    string FullDir = dir + GetStreamMD5(file.InputStream) + FileExt;//构建完整路径
                    file.SaveAs(Request.MapPath(FullDir));//保存完整图片
                    string ThumbnalPath = dir + Guid.NewGuid() + ".jpg";
                    MakeThumbnail(Request.MapPath(FullDir), Request.MapPath(ThumbnalPath), 100, 100, "H");//保存缩略图
                    using (Image img = Image.FromFile(Request.MapPath(ThumbnalPath)))
                    {
                        return Json(new
                        {
                            imagePath = ThumbnalPath,
                            width = img.Width,
                            height = img.Height
                        });
                    }
    
                }
                else
                {
                    return Content("上传文件失败");
                }
    
            }
    
    
    
            /// <summary>
            /// 计算文件的MD5值
            /// </summary>
            /// <param name="filepath"></param>
            /// <returns></returns>
            public static String GetStreamMD5(Stream stream)
            {
                string strResult = "";
                string strHashData = "";
                byte[] arrbytHashValue;
                System.Security.Cryptography.MD5CryptoServiceProvider oMD5Hasher =
                    new System.Security.Cryptography.MD5CryptoServiceProvider();
                arrbytHashValue = oMD5Hasher.ComputeHash(stream); //计算指定Stream 对象的哈希值
                //由以连字符分隔的十六进制对构成的String,其中每一对表示value 中对应的元素;例如“F-2C-4A”
                strHashData = System.BitConverter.ToString(arrbytHashValue);
                //替换-
                strHashData = strHashData.Replace("-", "");
                strResult = strHashData;
                return strResult;
            }
    
            #region 缩略图
            /// <summary>
            /// 生成缩略图
            /// </summary>
            /// <param name="originalImagePath">源图路径(物理路径)</param>
            /// <param name="thumbnailPath">缩略图路径(物理路径)</param>
            /// <param name="width">缩略图宽度</param>
            /// <param name="height">缩略图高度</param>
            /// <param name="mode">生成缩略图的方式</param>    
            public static void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, string mode)
            {
                System.Drawing.Image originalImage = System.Drawing.Image.FromFile(originalImagePath);
    
                int towidth = width;
                int toheight = height;
    
                int x = 0;
                int y = 0;
                int ow = originalImage.Width;
                int oh = originalImage.Height;
    
                switch (mode)
                {
                    case "HW":  //指定高宽缩放(可能变形)                
                        break;
                    case "W":   //指定宽,高按比例                    
                        toheight = originalImage.Height * width / originalImage.Width;
                        break;
                    case "H":   //指定高,宽按比例
                        towidth = originalImage.Width * height / originalImage.Height;
                        break;
                    case "Cut": //指定高宽裁减(不变形)                
                        if ((double)originalImage.Width / (double)originalImage.Height > (double)towidth / (double)toheight)
                        {
                            oh = originalImage.Height;
                            ow = originalImage.Height * towidth / toheight;
                            y = 0;
                            x = (originalImage.Width - ow) / 2;
                        }
                        else
                        {
                            ow = originalImage.Width;
                            oh = originalImage.Width * height / towidth;
                            x = 0;
                            y = (originalImage.Height - oh) / 2;
                        }
                        break;
                    default:
                        break;
                }
    
                //新建一个bmp图片
                System.Drawing.Image bitmap = new System.Drawing.Bitmap(towidth, toheight);
    
                //新建一个画板
                System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap);
    
                //设置高质量插值法
                g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
    
                //设置高质量,低速度呈现平滑程度
                g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
    
                //清空画布并以透明背景色填充
                g.Clear(System.Drawing.Color.Transparent);
    
                //在指定位置并且按指定大小绘制原图片的指定部分
                g.DrawImage(originalImage, new System.Drawing.Rectangle(0, 0, towidth, toheight), new System.Drawing.Rectangle(x, y, ow, oh), System.Drawing.GraphicsUnit.Pixel);
    
                try
                {
                    //以jpg格式保存缩略图
                    bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg);
                }
                catch (System.Exception e)
                {
                    throw e;
                }
                finally
                {
                    originalImage.Dispose();
                    bitmap.Dispose();
                    g.Dispose();
                }
            }
            #endregion
  • 相关阅读:
    vim复制
    嵌入式Linux学习(二)
    (Java实现) 洛谷 P1042 乒乓球
    (Java实现) 洛谷 P1042 乒乓球
    (Java实现) 洛谷 P1071 潜伏者
    (Java实现) 洛谷 P1071 潜伏者
    (Java实现) 洛谷 P1025 数的划分
    (Java实现)洛谷 P1093 奖学金
    (Java实现)洛谷 P1093 奖学金
    Java实现 洛谷 P1064 金明的预算方案
  • 原文地址:https://www.cnblogs.com/tanzhen/p/4631335.html
Copyright © 2011-2022 走看看