【问题标题】:Bypassing the browse file / upload file dialog绕过浏览文件/上传文件对话框
【发布时间】:2012-11-09 17:31:17
【问题描述】:

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

该文件与插件代码分开。

这是否可以通过 Javascript 或开发 Chrome、Firefox 扩展来实现?

我试过了:

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

然后提交周围的表单。但这没有用。

【问题讨论】:

  • 它必须是 Chrome 扩展 API 中的内容。使用标准 API 无法做到这一点。即使是File API,第一步也需要用户告诉你文件在哪里。
  • 如果您只对 Chrome 扩展感兴趣,那么为什么要添加 firefox-addon 标签?
  • @WladimirPalant 如果可能的话,我可能会考虑开发一个 ff 扩展名

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


【解决方案1】:

如果您的目标是将文件发送到服务器,那么尝试在 <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);

【讨论】:

  • 我的目标是提交一个现有的表单,希望只需单击提交按钮,然后在此之前选择正确的文件。我自己无法发送文件。我只是自动点击现有的本地服务器管理控制台(Websphere)
【解决方案2】:

火狐:

根据this answer,你想要的似乎是可能的,但我没有仔细调查过。

铬:

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

所以,一个普通的网页当然做不到,很明显。如果 Chrome 扩展可以做到这一点(即读取文件系统中的任何文件),那么它至少需要特殊权限。 list of permissions 不包括文件系统访问,所以这是不可能的。

正如我在开头提到的那样,唯一的选择是开发一个 NPAPI 插件来为您读取文件,这就像建造一家医院来治疗青春痘一样。 NPAPI 的开发学习曲线非常陡峭,并且引入了严重的安全问题(由于您的扩展现在可以充当本地用户,因此安全妥协的成本要高得多)。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 2011-03-26
    相关资源
    最近更新 更多