关于WebForms下面FileUpload控件获取FileName的一个注意点

简介: 这个问题源自一位热心而且踏实的读者,发现《ASP.NET 3.5+SQL Server网站模块化开发全程实录》中第117页的一段实例代码:   using System;using System.

    这个问题源自一位热心而且踏实的读者,发现《ASP.NET 3.5+SQL Server网站模块化开发全程实录》中第117页的一段实例代码:

 

using  System;
using  System.Web;
using  System.Web.UI;
using  System.Web.UI.HtmlControls;

public   partial   class  upLoadFile : System.Web.UI.Page
{
    
protected   void  UpLoadFile_Click(Object sender, EventArgs e)
    {
        
        FileSize.InnerHtml 
=  UpLoadFile.PostedFile.ContentLength.ToString();
        
// 获取上传文件名
        String theFileDir  =  UpLoadFile.PostedFile.FileName; // 获取文件名的完整路径
        
    }
}

    经过这位朋友的严格跟踪测试,发现PostedFile.FileName并不是“获取文件名的完整路径”,而只是文件名。
    起初我也愣了一下,于是赶紧测试,发现确实是文件名,而不是完整路径。但是在我记忆中,非常确定这个方法是可以获取到完整路径的。于是静下心来一想,真相只有一个——浏览器!
    着手验证。
    上传本地物理路径的文件D:\testupload.jpg。
        用IE7/IE8获取PostedFile.FileName结果如下:testupload.jpg。
        用IE6获取PostedFile.FileName结果如下:D:\testupload.jpg。
    同时使用HttpWatch跟踪了一下,发现从Post的环节上,就已经显现出上述差别:
        IE7/8:filename="testupload.jpg" Content-Type: image/pjpeg
        IE6:filename="D:\testupload.jpg" Content-Type: image/pjpeg

    于是问题已经本明了了:不同的浏览器对于post<input type="file" />的值(一般这个值中包含了两个信息,分别是[路径+]文件名以及ContentType)有所差别(其本质除了浏览器的行为因素外,还有默认安全设置的问题)。

    因此得出一个更加周全的处理建议:使用FileUpload控件在获取文件名的时候,尽量使用Path.GetFileName(UpLoadFile.PostedFile.FileName)这样的方法,将其视同完整路径来处理,这样可以使任何浏览器下面都能得到正确的文件名,而不会包含路径(书本中用了一个比较繁琐的过程过滤路径,仅供学习之用:))。

    同时,也不会要再为获取不到物理路径而感到奇怪了,如果你真的那么好奇,不妨请js帮忙吧,我想这对大多数程序员都不是什么难事了。  起先我在本机很容易就获取了完整的路径,不过经过几位朋友的提示,发现远程访问的时候还是会有问题,看来这确实是件难事了,不过这本身也就是浏览器安全性的体现,关于非要从客户端获取完整路径的问题我就不钻牛角尖了:)

    PS:这位朋友说网上找了一圈都没有找到说是浏览器原因的,特此记录一下,希望对更多的人有所帮助。

 

QQ:498977166

http://szw.cnblogs.com/
研究、探讨.NET开发
转载请注明出处和作者,谢谢!

 


微信开发深度解析:微信公众号、小程序高效开发秘籍
Senparc官方教程《微信开发深度解析:微信公众号、小程序高效开发秘籍》,耗时2年精心打造的微信开发权威教程,点击这里,购买正版

 

目录
相关文章
|
XML Java 测试技术
OAF_文件系列5_实现OAF解析XML文件javax.xml.parsers(案例)
20150729 Created By BaoXinjian 一、摘要 通过javax.xml.parsers.DocumentBuilder解析从系统系统导入的XML文件 此过程需要用到一些包方法 1.
1043 0
phpexcel导入,出现PHPExcel_RichText Object解决办法
phpexcel导入,出现PHPExcel_RichText Object解决办法
316 0
|
Web App开发 JavaScript 容器
|
Java
jsp中如何整合CKEditor+CKFinder实现文件上传
最近笔者做了一个新闻发布平台,放弃了之前的FCKEditor编辑器,使用了CKEditor+CKFinder,虽然免费的CKFinder是Demo版本,但是功能完整,而且用户都是比较集中精神发新闻的人,不会在意这个。
1492 0
|
Java
struts2整合CKEditor和CKFinder实现上传
上一篇文章给大家分享了CKEditor+CKFinder+JSP实现了在线编辑器上传图片的功能,这里在给大家分享一下如何在前面的基础上在struts2下实现这样的功能。 实现与Struts2的整合,整合的过程确实easy.不过实现之后,图片上传不上去,上传之后显示“文件不存在”,然后在网上找了一些资料,经过总结最终实现了这个功能。
1319 0

热门文章

最新文章