0

这是一个很常见的问题,但我找不到答案

我有一个带有输入文本框(类型=文件)和提交按钮的简单 HTML。单击提交按钮时,我调用了一个 js 函数,在其中尝试获取文件的完整路径

var data = $('#fileName').val();

问题是我没有得到我正在上传的文件的完整文件路径。我知道由于安全原因,chrome 给了我一个C:\fakePath\filename,而 firefox 只给了我fileName. 但是如果我需要一条完整的路径,我该怎么办?

PS:此外,我将进行 ajax 调用并将该文件路径提供给需要它使用 FileReader 读取该文件的后端

4

4 回答 4

3

您无法获得完整的路径!没有办法做到这一点!即使您在 Intranet 上并且您有足够的权限。

解决方法是设置一个textarea并要求用户输入文件的完整路径。

于 2013-03-20T04:20:39.250 回答
1

简而言之,一旦在服务器端加载文件,您就不能拥有文件的全名,您只会在原始byte数组中拥有文件名及其内容(以及其他属性)。这不是 Java问题,也不是其他服务器端技术问题,与浏览器实现有关(但看起来IE6 可能包含这方面的缺陷)。

与您的问题没有直接关系,但引起了我的注意

PS:此外,我将进行 ajax 调用并将该文件路径提供给需要它使用 FileReader 读取该文件的后端

通常,您无法使用 ajax 处理文件上传,因为它可能导致安全漏洞。尽管如此,仍有一些浏览器(如 Chrome 和 Firefox)允许您使用XMLHttpRequest发送文件,但在某些浏览器(如 IE8-)上不允许这样做,因此您必须使用 iframe 才能使文件 ajax 上传工作。

为了避免处理所有这些问题,我建议您使用处理 ajax 文件上传的第三方 js 库。一个例子是blueimp jQuery 文件上传,它也有Java 服务器端的例子(免责声明:我不在这个项目中工作,也没有以任何方式与 blueimp 相关联)。请注意,使用此插件需要您对 HTML/JavaScript/jQuery/Java 服务器端有一定的了解,因此如果您是初学者,可能需要一些时间才能使其工作,但一旦完成就非常好。

于 2013-03-20T04:43:50.900 回答
0

Browsers block the filepath access on javascript for securit reasons.

The behavior makes sense, because the server doesn't have to know where the user stores the file on his computer, it is irrelevant to the upload process.

于 2013-03-20T04:37:59.557 回答
0

我不知道您使用的是哪种技术.. 但是一旦文件上传到服务器上,您总是可以获取文件名(使用 php 或 .net )

您上传的步骤应如下所示:

1) 将文件上传到服务器 (ez /uploadedFiles/...filename 2) 创建一个从上传路径获取文件名的方法 3) 只需将文件名插入数据库(这将使您可以灵活地更改文件夹名称如果需要,将来上传的文档)

通常文件名不会按原样存储。以避免将来发生名称冲突。因此,建议始终通过在文件名后添加分钟和秒来重命名文件名。

如果有任何疑问,请询问。

希望能帮助到你。

于 2013-03-20T04:34:31.533 回答