使用Ajax上传文件 - 没有获得完整的fileName

时间:2013-03-20 04:18:41

标签: java javascript jquery file-upload

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

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

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

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

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

4 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

简而言之,一旦在服务器端加载文件,就不能拥有文件的全名,只需要在原始byte数组中包含文件名及其内容(以及其他属性)。这不是Java thing ,也不是其他服务器端技术问题,与浏览器实现有关(但它看起来IE6 may contain a flaw关于此。)

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

  

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

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

为了避免处理所有这些问题,我建议您使用处理ajax文件上传的第三方js库。一个例子是blueimp jQuery file upload,它也有Java server side examples(免责声明:我不在这个项目中工作,也没有以任何方式与blueimp相关联)。请注意,使用此插件需要您具备HTML / JavaScript / jQuery / Java Server Side的中级知识,因此,如果您是初学者,可能需要一些时间才能使其工作,但一旦它确实很好。

答案 2 :(得分:0)

我不知道您正在使用哪种技术..但是一旦将其上传到服务器上,您就可以随时获取文件名(使用php或.net)

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

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

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

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

希望它有所帮助。

答案 3 :(得分:0)

由于安全原因,浏览器会阻止javascript上的文件路径访问。

这种行为是有道理的,因为服务器不必知道用户在他的计算机上存储文件的位置,这与上传过程无关。