Google Chrome扩展程序 - 如何访问和存储本地文件以供日后使用

时间:2011-08-23 19:03:39

标签: google-chrome-extension fileapi

我目前正在编写我的第一个Google Chrome扩展程序。简化,我想在扩展程序弹出窗口中添加文件浏览器,浏览器图像并在当前打开的选项卡中插入该图像。

此外,我想将所选文件存储在扩展中,以便以后重用。

第一种方法是使用FileAPI加载文件内容并存储localStorage中编码的文件内容base64。不幸的是,由于localStorage的空间限制,在几张图片后停止工作。

更好的方法是获取所选文件的绝对文件名并在必要时重新读取文件 - 遗憾的是我无法获得包含路径的完整文件,只是获取了没有路径的文件名。

另一种方法可能是WebSQL,但这似乎很复杂 - 任何人都可以确认我们是否有配额?

有人事先做过这样的事吗?我很乐意得到任何帮助。

1 个答案:

答案 0 :(得分:1)

根据您对缓存文件的需求,您可以简单地使用FileIO API将二进制文件保存到扩展程序的沙箱环境中。只是将文件路径存储到原始文件可能不会起作用,因为API只能在其沙箱中读取[除非您通过输入自己选择文件]。

如有必要,您可以将“unlimitedStorage”权限(developer documentation更多内容)添加到 manifest.json ,以覆盖存储限制。

"permissions": [
  "unlimitedStorage"
],

这仅适用于文件I / O(临时/持久)和Web SQL(仅限临时)。由于它是同步实现, localStorage最多有~2700000个字符(因为它存储为UTF-16),设置此权限不会增加。

使用File API和Chrome 13+,您可以申请一定数量的配额(有关完整示例,请参阅herehere)。这已被引入适用于Web应用程序和工作而无需设置 unlimitedStorage 权限。 (但是,如果设置了权限,则当前不会要求用户允许存储请求)

webkitStorageInfo.requestQuota( 
    webkitStorageInfo.PERSISTENT
    newQuotaInBytes,
    quotaCallback,
    errorCallback);

在我的实验中,这似乎是持久存储大量数据的唯一途径。