25

当我使用 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

但我不确定为什么不同浏览器之间会有所不同。有谁知道这是什么原因?

谢谢。

4

4 回答 4

31

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

new FileInfo(myHttpPostedFileBase.FileName).Name

即使包含路径,这将确保您始终只获得文件名。

于 2011-10-13T08:16:42.890 回答
12

这是一个安全/隐私问题,firefox/mozilla 做得对,如果没有插件、applet、silverlight、flash 或其他一些机制,您将无法获得完整路径。

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

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

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

我希望 IE 也能效仿,这样我们就有了一个一致且安全的环境。

于 2008-12-19T23:54:09.100 回答
7

在 IE8 中,这种行为已经改变,它只会传递文件名,而不是完整路径。;-)

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

希望解析文件名的服务器端应用程序应该检查,但不要期望文件名中有反斜杠。

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

于 2008-12-20T00:27:55.007 回答
4

您还可以使用仅返回文件名的 Path.GetFileName(File.FileName)。例子:

Dim File As HttpPostedFile = context.Request.Files("txtFile")
' let's FileName is "d:\temp\1.txt"
Dim FileName As String = Path.GetFileName(File.FileName)
' FileName will be "1.txt"
于 2013-05-27T08:33:33.973 回答