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         } 
原文地址:https://www.cnblogs.com/jean69/p/3631981.html