我想使用jquery + javascript实现电子邮件的附件功能,例如Gmail。
所以我使用输入类型文件来选择文件 - 它只提供文件名,而不是文件的完整路径。我想要文件的完整路径,以便我将文件转换为字节,然后将ajax请求发送到具有文件字节的服务器。我用过这个:
<input type="file id="fileUpload">
var filePath=$('#fileUpload').val();
但filePath
var仅包含所选文件的名称,而不包含完整路径。我在网上搜索过,但出于安全考虑,似乎浏览器(FF,chrome)只是给出文件名。
谢谢。
答案 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”行为。
我几天前创建了一个类似的电子邮件附件解决方案。这并不像你希望的那么简单,所以,简单的答案是,你将不得不做更多的工作和思考。