【问题标题】:Accessing file data after download in Chrome...?在 Chrome 中下载后访问文件数据...?
【发布时间】:2016-03-13 11:57:23
【问题描述】:

我正在编写一个扩展程序,理想情况下,它可以在文件下载后读取文件(通过正常的下载过程)。那可能吗?我可以通过 chrome.downloads 操作获取文件名,但我找不到读取实际字节的方法。我不需要写或移动它们,只需阅读即可。

【问题讨论】:

  • 理想情况下,您应该无法从文件系统中读取任何文件。那将是安全漏洞。如果文件正在被下载/存储在 HTML5 使用的临时文件系统中,那么它是可能的。
  • @user3613129 你认为我能以某种方式拦截下载以使用 fs api 管理它吗?
  • 我不这么认为。同样,如果您的扩展程序能够拦截用户的下载,那也将构成安全漏洞。 FS API 有不同的用例。它用于对本地文件系统进行写入/读取,其中本地文件系统是指浏览器为这些操作创建的临时保护路径。请通过 FS API 了解更多信息。
  • @user3613129 扩展程序可以做的任何事情都可以被视为“安全漏洞”。与网络代码相比,它们具有更高的权限。

标签: javascript google-chrome google-chrome-extension html5-filesystem


【解决方案1】:

我在同样的问题上苦苦挣扎,终于找到了一种简单的解决方法,可以从 Chrome 扩展程序中读取下载文件的内容。

您只需要在清单文件中添加对file://* 的权限,并且一旦您在系统中获得了文件的路径(在filename 属性中使用chrome.downloads.search),就向url @987654326 发出GET XMLHttpRequest @。

【讨论】:

  • 嗯,我在 Firefox 中尝试过,但似乎不起作用。我一做xhr.open("GET", "file:///Users/myuser/Downloads/myexistingfile", false),代码就会停止。当 url 是远程的时候它工作正常,所以调用是正确的。你能列出你的permissions 数组吗?也许 FF 比 Chrome 更严格......
  • 没关系,这是因为本地文件与远程文件没有相同的事件。通过附加到onreadystatechange,事情按预期工作。太好了!
  • .. 或不。请求完成后我仍然无法读取实际数据,Firefox 中的响应始终为空。令人失望。
  • 您不需要比“downloads”和“file://*”更多的权限。至于 xhr 请求,请小心,因为您检索的可能是 Blob 数据。这是我的请求示例代码:var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function () { if (this.readyState == 4) { file.blobData = this.response; } } xhr.open('GET', "file://" + file.filename); xhr.responseType = 'blob'; xhr.send();
  • 根据wiki.mozilla.org/WebExtensions/…,我认为FireFox可能故意不支持它
【解决方案2】:

不,下载 API 不提供访问文件内容的方法。

最接近拦截的是 WebRequest API,但目前doesn't allow response access 也是。

您能做的最多就是用webRequest 捕获请求,取消它并尝试自己进行XHR,将结果存储在某个临时位置,如提到的FileSystem API。这将是一个糟糕的用户体验(原始请求莫名其妙地失败)并且可能无法在所有情况下工作(因为 XHR 无法设置所有标头以完全复制请求)。

【讨论】:

  • 如果我通过 XHR 使用单独的显式操作自己启动下载(即右键单击->“使用 MyExtension 下载”),那么我是否能够提示用户将其保存在标准中以某种方式下载文件夹?
  • 之后你可以调用chrome.downloads.download
【解决方案3】:

WhiteFangs 的解决方案对我有用。但是,我应该添加一个警告,即使用文件协议的 XMLHttpRequest 仅在我从后台脚本启动它时才对我有效。当我从内容脚本或浏览器操作的 javascript 环境尝试它时出现错误。

【讨论】:

    猜你喜欢
    • 2016-12-28
    • 2022-11-20
    • 1970-01-01
    • 1970-01-01
    • 2021-10-31
    • 2021-04-17
    • 1970-01-01
    • 2021-01-28
    • 1970-01-01
    相关资源
    最近更新 更多