当我使用包含<input id="myFile" type="file" runat="server" />
的表单上传文件时,我的服务器端代码在使用Firefox时只看到没有完整路径的文件名,而在IE中它可以正常工作。
在这种情况下是否可以检索服务器端的完整文件路径?
答案 0 :(得分:8)
你做不到。实际上,在大多数情况下,只有IE提供的信息对服务器来说并不重要。 FF和Opera至少都没有提供这些信息 [更新]也尝试使用Safari,仍然没有路径...有人报告Chrome可能提供信息,虽然是测试版,可能会改变......
也许在某些内联网案例中你可能需要它们。在这种情况下,您可能会要求用户将路径粘贴到辅助输入字段中...不是很友好,但至少他们知道他们提供了信息。
实际上,我知道有些人出于某些原因需要这些信息,所以他们使用JavaScript从文件输入字段中选取路径并将其放在隐藏字段中。 FF开发人员发现它不安全(你可以从一个简单的路径中学到很多东西......比如用户的登录名!)所以禁止在FF3中使用这种用法,让一些人对这个版本感到愤怒......
参考文献:Firefox 3's file upload box中提到的Firefox 3 annoyance: Keying-in disabled in file upload control ...;还有许多其他的File input box disabled leads to great usability problem。
答案 1 :(得分:3)
您永远无法确定在文件上传文件中提交完整的文件路径,甚至是可靠的文件名或内容类型。即使您获得完整的文件路径,也不知道客户端操作系统上的路径分隔符是什么,或者文件扩展名(如果存在)是否表示任何内容。
如果您的应用程序需要提交文件的filepath / filename / content-type,而不仅仅是为用户提供上传项目的默认标题,那么它就会出错并需要修复。
答案 2 :(得分:2)
我已在评论中说明了这一点,但我认为值得重复。
Microsoft选择让文件控件提供文件的完整路径,以便在Intranet应用程序中使用。
HTML规范仅makes mention值应包含在一个位置:
用户代理可以使用的值 value属性作为初始文件 名。
但是,它们还有多部分/表单数据编码should look like的示例,并且它不包含文件路径。
换句话说,IE正在打破标准,你不能依赖其他浏览器,甚至更高版本的IE来支持它。