绕过浏览文件/上传文件对话框

时间:2012-11-09 17:31:18

标签: javascript google-chrome google-chrome-extension firefox-addon

我正在构建Chrome扩展程序供内部使用,用户可以一步上传文件。这是始终相同的文件,我想跳过浏览对话框并直接为输入字段分配正确的值。

该文件与插件代码分开。

这可以通过Javascript或开发Chrome,Firefox扩展吗?

我试过了:

input.val("file://C:/random.txt")

然后提交周围的表格。但那没用。

2 个答案:

答案 0 :(得分:2)

<强>火狐:

根据this answer,你想要什么似乎是可能的,但我没有仔细研究过。

<强>铬:

NPAPI plugin之外,这绝对不可能。除非用户通过文件对话框明确要求,否则您的浏览器无法访问文件系统。如果Web上的任何页面能够以编程方式设置文件路径,然后在用户单击表单按钮时获取文件,则会引起大量安全问题。

因此,显然,正常的网页肯定无法做到。如果Chrome扩展程序可以执行此操作(即读取文件系统中的任何文件),那么它至少需要特殊权限。 list of permissions不包含文件系统访问权限,因此不可能。

正如我在开头提到的那样,唯一的选择是为您开发一个NPAPI插件来读取文件,这就像建立医院治疗疙瘩一样。 NPAPI具有相当陡峭的开发学习曲线,并且引入了重大的安全问题(因为您的扩展现在可以作为本地用户,安全性损害的成本要高得多)。

如果您愿意将文件放在浏览器virtual HTML5 filesystem上,那么您可以这样做。如果不了解您的需求,我不能说这是否适合您。

答案 1 :(得分:2)

如果您的目标是将文件发送到服务器,然后尝试在<input>字段中选择该文件是错误的 - 您可以直接创建FormData objectsend it via XMLHttpRequest。请注意,您还可以从现有表单创建FormData对象。这既可以在Firefox和Chrome中使用,也可以在网页上使用(当然通常使用同源限制)。

棘手的部分是获得可以添加到表单数据的File object。据我所知,除了使用NPAPI插件之外,Chrome扩展程序没有直接的文件系统访问权限 - 因此他们无法从用户的磁盘驱动器获取文件,他们只能创建包含某些数据的blob。但是,Firefox扩展程序具有File constructor,允许它们按路径创建File对象。

所以在Firefox中你会做这样的事情:

var formdata = new FormData();
formdata.append("file", new File("file://C:/random.txt"));

var request = new XMLHttpRequest();
request.open("POST", "http://my.server/submitFile");
request.send(formdata);