当前位置:  开发笔记 > 编程语言 > 正文

如何从Firefox 3中的HTML输入表单获取文件路径

如何解决《如何从Firefox3中的HTML输入表单获取文件路径》经验,为你挑选了2个好方法。

我们有简单的HTML表单,如下所示:

在IE7(可能是所有着名的浏览器,包括旧的Firefox 2)中,如果我们提交像'// server1/path/to/file/filename'这样的文件,它可以正常工作,并提供文件和文件名的完整路径.

在Firefox 3中,它只返回'filename',因为它们有新的"安全功能"来截断路径,如Firefox错误跟踪系统(https://bugzilla.mozilla.org/show_bug.cgi?id=143220)中所述.

我不知道如何克服这个"新功能",因为它导致我的webapp中的所有上传表单停止在Firefox 3上运行.

任何人都可以帮助找到一个解决方案来获取Firefox 3和IE7上的文件路径?



1> BalusC..:

在IE7(可能是所有着名的浏览器,包括旧的Firefox 2)中,如果我们提交像'// server1/path/to/file/filename'这样的文件,它可以正常工作,并提供文件和文件名的完整路径.

我不知道如何克服这个"新功能",因为它导致我的webapp中的所有上传表单停止在Firefox 3上运行.

这里有一个重大的误解.为什么你需要服务器端的完整文件路径?想象一下,我是客户端,我有一个文件,C:\path\to\passwords.txt我给你完整的文件路径.作为服务器,您将如何获得其内容?您是否有与本地磁盘文件系统的开放TCP连接?您是否在其他服务器计算机上将Web应用程序投入生产时是否测试了文件上载功能?

当它只会工作在客户端和服务器运行在物理上是相同的机器,因为你再有访问相同的硬盘文件系统.这只会在您本地开发您的网站时发生,因此巧合的webbrowser(客户端)和Web服务器(服务器)都在同一台机器上运行.

在MSIE和其他古老的webbrowsers中发送完整的文件路径是由于安全漏洞.在W3和RFC2388从未提及的规格,包括完整的文件路径.只有文件名.Firefox正确地完成了它的工作.

要处理上载的文件,您不需要知道完整的文件路径.您应该对请求时客户端已经发送到请求正文中的服务器的完整文件内容感兴趣multipart/form-data.将表单更改为RFC2388中所述的以下内容:

如何在服务器端获取上载文件的内容取决于您正在使用的服务器端编程语言.

Java/JSP的:你想使用HttpServletRequest#getPart()或Apache的百科全书文件上传API来解析它.您应该最终得到一个InputStream文件内容,您可以OutputStream根据自己的喜好写出任何文件内容.你可以在这个答案中找到一个例子.

Java/JSF:您希望使用您正在使用的组件库提供的组件或任何其他文件上载组件.在这里,你想获得一个风格的文件内容InputStream.请参阅此答案以获取示例.

PHP:文件内容已隐式存储在临时磁盘上.您想使用move_uploaded_file()函数将其移动到所需位置.另请参见PHP手册.

ASP.NET:我没有详细解答,因为我没有这样做,但谷歌为我找到了一些例子:ASP.NET示例,ASP.NET 2.0示例

每当您想要获取上载文件的文件名部分时,您应该从文件名中修剪完整路径.这些信息与您完全无关.另请参阅此Apache Commons FileUpload FAQ条目

为什么FileItem.getName()返回整个路径,而不仅仅是文件名?

Internet Explorer提供上载文件的完整路径,而不仅仅是基本文件名.由于FileUpload完全提供客户端(浏览器)提供的内容,因此您可能希望在应用程序中删除此路径信息.


这是一个很好的答案.然而,我实际上发现自己处于一种奇怪的境地 - 我正在开发一个供个人使用的网络应用程序,将在本地托管/使用.要预览使用本地应用程序创建的内容,我需要完整访问**本地**文件路径.这根本不可能吗?

2> 小智..:

对于在Firefox中预览的工作原理 - 附件是第一个示例中的附件元素的对象:

           if (attachment.files)
             previewImage.src = attachment.files.item(0).getAsDataURL();
           else
             previewImage.src = attachment.value;

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有