如何在javascript中使用输入类型文件获取文件的完整路径?

时间:2010-11-22 10:05:41

标签: java javascript jquery jsp file-upload

我想使用jquery + javascript实现电子邮件的附件功能,例如Gmail。

所以我使用输入类型文件来选择文件 - 它只提供文件名,而不是文件的完整路径。我想要文件的完整路径,以便我将文件转换为字节,然后将ajax请求发送到具有文件字节的服务器。我用过这个:

<input type="file id="fileUpload">
var filePath=$('#fileUpload').val(); 

filePath var仅包含所选文件的名称,而不包含完整路径。我在网上搜索过,但出于安全考虑,似乎浏览器(FF,chrome)只是给出文件名。

谢谢。

4 个答案:

答案 0 :(得分:1)

你不需要它。相信我。

你最好的选择,Javaranch: File Upload How-to

答案 1 :(得分:0)

这是不可能的。如果可以,我可以通过操作您的上传字段来访问硬盘上的任何文件。无论如何,你为什么还需要它?

答案 2 :(得分:0)

正如您已经指出的那样,许多浏览器都不允许您这样做。那是1)一件好事(安全和诸如此类),2)正确答案(没有办法迫使他们给出完整的路径,缺少一些利用)。对不起,你不喜欢它,但这不太可能使答案不同。

从更积极的方面来说,可能使用一些Flash或Java小程序来访问本地文件(例如Uploadify),但用户需要允许其权限提升。

编辑:我查看了GMail的功能,你可能想要一些与你的问题截然不同的东西:它使用了一个巧妙伪装的iframe(没有边框,相同的背景,看起来像页面的一部分),其中包含一个用于文件上传的小表单。简化为:

<form id="main_mail_form">
  <input type="hidden" name="compose_mail_identifier" value="id_beef-cafe">
  <!-- buttons and previous form fields - subject, to, cc -->
  <iframe src="attachments?for_message=id_beef-cafe">
  <!-- note that we're passing      ^^^^^^^^^^^^ the same identifier here -->
  </iframe>
  <!-- other form fields and buttons -->
</form>

iframe内部:

<form id="attachment_mail_form">
  <input type="hidden" name="compose_mail_identifier" value="id_beef-cafe">
  <!-- ^^ note that this has the same value as the main form -->
  <input type="file">
  <!-- other form elements -->
</form>

在邮件中添加附件时,您只需在iframe中提交表单。 Google似乎使用一些每个消息唯一标识符(示例中名为compose_mail_identifier)将附件与电子邮件进行匹配。这样,附件和邮件由不同的表单处理,只有在您单击“发送”时才合并到电子邮件中。

答案 3 :(得分:0)

您将无法以这样的方式访问该文件,因为它违反了浏览器强制执行的基本安全规则。我喜欢使用的一个技巧是创建一个没有边框的iframe来容纳上传表单。然后,如果您决定将附件的记录插入数据库,则应该能够上传文件并使用文件名称和某种id发回到父窗口。我使用iframe,因为它模仿了你想在现代Web应用程序中实现的“AJAX”行为。

我几天前创建了一个类似的电子邮件附件解决方案。这并不像你希望的那么简单,所以,简单的答案是,你将不得不做更多的工作和思考。