System.Drawing.Image.FromFile()获取客户端图片的弊端
下面是一个通过FromFile()获取客户端图片,并可以在保存之前改变图片大小的问题
//创建位图 System.Drawing.Bitmap bmp; string UploadFileName = ""; string UploadFileDestination = ""; UploadFileName = UploadFile.PostedFile.FileName; Response.ContentType="image/jpeg"; System.Drawing.Image img=System.Drawing.Image.FromFile(UploadFileName); if(img.Width>600 || img.Height>400) { bmp=new System.Drawing.Bitmap(img,600,400); } else { bmp=new System.Drawing.Bitmap(img,img.Width,img.Height); } string fileTime=DateTime.Now.Year.ToString()+DateTime.Now.Month.ToString()+DateTime.Now.Day.ToString()+DateTime.Now.Hour.ToString() +DateTime.Now.Minute.ToString()+DateTime.Now.Second.ToString()+DateTime.Now.Millisecond.ToString(); string fileExtName=UploadFileName.Substring(UploadFileName.LastIndexOf(".")); //UploadFileName = UploadFileName.Substring(UploadFileName.LastIndexOf("\\")+1); UploadFileName="\\"+fileTime+fileExtName; //获取服务器根目录的物理路径 UploadFileDestination = HttpContext.Current.Request.PhysicalApplicationPath; //指定你上传文件的文件夹,注意开放权限 UploadFileDestination += "upfiles"; UploadFileDestination += "\\"; //保存位图 bmp.Save(UploadFileDestination + UploadFileName,System.Drawing.Imaging.ImageFormat.Jpeg); 注意了:用FromFile()获取客户端的文件会产生这样一个问题,在有的机子上能上传成功,而有的则不能。这是为什么呢?这与系统NTFS文件格式有关,在客户端文件夹的访问权限要设置成Everyone开放。因此用FromFile()获取客户端文件进行操作并不是好方法,有了种更好的办法就是用流操作,具体如下: 把上面代码中的System.Drawing.Image img=System.Drawing.Image.FromFile(UploadFileName); 改为: System.Drawing.Image img=System.Drawing.Image.FromStream(UploadFile.PostedFile.InputStream); 这种方法不会受到权限的干扰,因为它是把客户端文件读到内存当中,而内存并不存在权限的问。 那也不是说使用FromFile()就不行,其实可以通过将客户端文件获取后先存在服务器端进行操作,将操作后的文件存为一个新的文件后删除原文件. |