• Asp.Net图片上传后缩略图空白


     今天在MVC模式下做图片上传的时候,执行调试后上传图片,缩略图显示正常,可是选了另外一张图片上传时,缩略图显示为空白,首先将前台代码放上:

     1 <h2>上传图片</h2>
     2 @using (Html.BeginForm("Upload", "Product", FormMethod.Post, new { enctype = "multipart/form-data" }))
     3 {
     4     <table class="list">
     5         <tr>
     6             <th>请选择要上传的图片</th>
     7             <td>
     8                 <input type="file" name="imgfile" />
     9             </td>
    10         </tr>
    11         <tr>
    12             <th></th>
    13             <td>
    14                 <input type="submit" value="上传" />
    15             </td>
    16         </tr>
    17     </table>
    18 }

     后台的上传方法如下:

     1        // <summary>
     2         /// 保存图片
     3         /// </summary>
     4         /// <param name="id"></param>
     5         /// <returns></returns>
     6         [HttpPost]
     7         public ActionResult Upload(int id,FormCollection form)
     8         {
     9             //1.0通过缩略图的虚拟路径获取物理路径
    10             string thumPath = Server.MapPath("/upload/thum/");
    11            //2.0原图像的物理存放路径
    12             string imgPath = Server.MapPath("/upload/img/");
    13             //2.0接收图片(因为只有一张,所有可以通过索引获取)
    14             var file=Request.Files[0];
    15             if (file != null)
    16             {
    17                 //获得图片的名称
    18                 string filename = file.FileName;
    19                 //从文件名中获取图片的拓展名
    20                 string extension = System.IO.Path.GetExtension(filename);
    21 
    22                 //利用GUID拼接新的图片文件名
    23                 string newFileName = Guid.NewGuid() + extension;
    24 
    25                 //3.0实现图片的缩略图
    26                 using (Image oldImg = Image.FromStream(file.InputStream))
    27                 {
    28                  
    29                     Image thumImg = oldImg.GetThumbnailImage(120, 120, () => false, IntPtr.Zero);
    30                  
    31                         //将缩略图保存到物理路径中
    32                         thumImg.Save(thumPath + newFileName);
    33                             
    34                     //将原始图片保存到物理起来
    35                     oldImg.Save(imgPath + newFileName);
    36 
    37                     //4.0将图片保存到数据库中
    38                     var entity = productBLL.Where(c => c.p_id == id).FirstOrDefault();
    39                     entity.img_url = newFileName;
    40                     productBLL.SaveChanges();
    41                 }
    42             }
    43             return Redirect("/Admin/Product/List");
    44         } 

    发现问题后,于是通过查看图片的属性中的详细信息来比较两张图片的区别,结果发现上传后缩略图为空白的图片存在像素单位为2,而上传后缩略图正常的图片没有像素单位,个人觉得应该是像素单位导致的问题,此后我上传其它没有像素单位的图片,缩略图都显示正常,为了解决此问题,个人使用了自定义的图片压缩方法,修改代码如下:

     1  // <summary>
     2  2         /// 保存图片
     3  3         /// </summary>
     4  4         /// <param name="id"></param>
     5  5         /// <returns></returns>
     6  6         [HttpPost]
     7  7         public ActionResult Upload(int id,FormCollection form)
     8  8         {
     9  9             //1.0通过缩略图的虚拟路径获取物理路径
    10 10             string thumPath = Server.MapPath("/upload/thum/");
    11 11            //2.0原图像的物理存放路径
    12 12             string imgPath = Server.MapPath("/upload/img/");
    13 13             //2.0接收图片(因为只有一张,所有可以通过索引获取)
    14 14             var file=Request.Files[0];
    15 15             if (file != null)
    16 16             {
    17 17                 //获得图片的名称
    18 18                 string filename = file.FileName;
    19 19                 //从文件名中获取图片的拓展名
    20 20                 string extension = System.IO.Path.GetExtension(filename);
    21 21 
    22 22                 //利用GUID拼接新的图片文件名
    23 23                 string newFileName = Guid.NewGuid() + extension;
    24 24 
    25 25                 //3.0实现图片的缩略图
    26 26                 using (Image oldImg = Image.FromStream(file.InputStream))
    27 27                 {
    28 28                  //初始化一个位图
    29 29                   using (Image thumImg = new Bitmap(120, 120))
    30                     {
    31                       //初始化画家
    32                         using (Graphics g = Graphics.FromImage(thumImg))
    33                         {
    34                         //压缩上传的图片,保存到位图中
    35                             g.DrawImage(oldImg, new Rectangle(0, 0, thumImg.Width, thumImg.Height), new Rectangle(0, 0, oldImg.Width, oldImg.Height), GraphicsUnit.Pixel);
    36 
    37                         }
    38                         //将缩略图保存到路径中
    39                         thumImg.Save(thumPath + newFileName);
    40                     }          
    41 33                             
    42 34                     //将原始图片保存到物理起来
    43 35                     oldImg.Save(imgPath + newFileName);
    44 36 
    45 37                     //4.0将图片保存到数据库中
    46 38                     var entity = productBLL.Where(c => c.p_id == id).FirstOrDefault();
    47 39                     entity.img_url = newFileName;
    48 40                     productBLL.SaveChanges();
    49 41                 }
    50 42             }
    51 43             return Redirect("/Admin/Product/List");
    52 44         } 
  • 相关阅读:
    python方式安装sentry
    nexus私服仓库mavenmetadata.xml缺失导致的构建失败或者下载504
    Hadoop2.7.2+zookeeper3.4.6完全分布式环境搭建(HDFS、YARN HA)
    ssh远程主机秘钥失效的解决方法(ssh黄金参数)
    解决报错libssl.so.1.1: cannot open shared object file: No such file or directory
    nginx:TIME_WAIT过多或者CLOSE_WAIT过多的状态
    python2 读写mysql
    Visual Studio展开和折叠函数代码和禁止自动展开
    干货分享:小技巧大用处之Bean管理类工厂多种实现方式
    小别
  • 原文地址:https://www.cnblogs.com/jean69/p/3631981.html
Copyright © 2020-2023  润新知