加入收藏 | 设为首页 | 会员中心 | 我要投稿 北几岛 (https://www.beijidao.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2021-05-20 08:50:36 所属栏目:大数据 来源: https://www.cnblogs.com/szw
导读:??? 这个问题源自一位热心而且踏实的读者,发现《ASP.NET 3.5+SQL Server网站模块化开发全程实录》中第117页的一段实例代码: ? using ?System; ?System.Web; ?System.Web.UI; ?System.Web.UI.HtmlControls; public ? partial class ?upLoadFile?:?System.Web
??? 这个问题源自一位热心而且踏实的读者,发现《ASP.NET 3.5+SQL Server网站模块化开发全程实录》中第117页的一段实例代码:

?

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

public?partialclass?upLoadFile?:?System.Web.UI.Page
{
????
protectedvoid?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:这位朋友说网上找了一圈都没有找到说是浏览器原因的,特此记录一下,希望对更多的人有所帮助。

(编辑:北几岛)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读