System.Drawing.Image.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()就不行,其实可以通过将客户端文件获取后先存在服务器端进行操作,将操作后的文件存为一个新的文件后删除原文件.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值