HttpPostedFile.FileName - 与IE不同

Rya*_*ith 25 browser security file-upload httppostedfile

当我使用ASP:File控件将文件上传到站点时,IE和Firefox中的FileName属性不同.在Firefox中,它只提供文件的名称,但IE提供了文件的完整路径.

我通过添加代码解决了这个问题:

Dim FileName As String = file.FileName
If FileName.LastIndexOf("\") > 0 Then
    FileName = FileName.Substring(FileName.LastIndexOf("\") + 1)
End If
Run Code Online (Sandbox Code Playgroud)

但我不确定为什么不同的浏览器会有所不同.有谁知道这个的原因?

谢谢.

See*_*vil 29

在IE和Chrome中测试的简单解决方法

new FileInfo(myHttpPostedFileBase.FileName).Name
Run Code Online (Sandbox Code Playgroud)

即使包含路径,这也将确保您始终只获取文件名.

  • @VincentSels这相当于:`Path.GetFileName(myHttpPostedFileBase.FileName)`,因为它不会删除文件扩展名. (6认同)

Rya*_*ook 12

这是一个安全/隐私问题,firefox/mozilla正在做正确的事情,如果没有加载项,applet,silverlight,flash或其他一些机制,你将无法获得完整路径.

以下是有关Mozilla立场的更多信息:

https://developer.mozilla.org/en/Updating_web_applications_for_Firefox_3

请参阅安全更改 - >文件上载字段部分

我希望IE能够效仿,因此我们拥有一致且安全的环境.

  • 仅供参考,我正在使用IE 11,它给了我完整的路径.这就是我发现这个问题的原因,因为我需要处理它. (9认同)

scu*_*ffe 7

在IE8中,此行为已更改,它将仅传递文件名,而不是完整路径.;-)

有关讨论IE8变更的IE博客文章的详细信息和链接:http: //blogs.msdn.com/b/webtopics/archive/2009/07/27/uploading-a-file-using-fileupload-control-fails-在-ie8.aspx

希望解析文件名的Serverside应用程序应检查,但不要指望文件名中有反斜杠.

IE8用户设置覆盖:http: //blogs.msdn.com/blogfiles/webtopics/WindowsLiveWriter/UploadingafileusingFileUploadcontrolfail_167/clip_image002_2.jpg

  • IE8默认情况下仍会在Intranet区域中传输完整路径名.参见[IE8安全博客](http://blogs.msdn.com/b/ie/archive/2008/07/02/ie8-security-part-v-comprehensive-protection.aspx)."此外,"上传文件时包含本地目录路径"对于Internet区域,URLAction已设置为"禁用".此更改可防止潜在敏感的本地文件系统信息泄漏到Internet.例如,而不是提交完整的路径C:\ users\ericlaw\documents\secret\image.png,Internet Explorer 8现在只提交文件名image.png." (5认同)