Chrome 打包应用;将文件条目复制到用户的下载目录

Chrome packaged app; copy a fileEntry to user's download directory

所以在我的应用程序中,有一个由我的应用程序创建的本地存储(fileEntry)。我想添加一个功能让用户可以访问该文件。由于应用程序本身没有访问 "Downloads" 目录的权限,目前我使用以下代码:

let link = document.createElement('a');
link.download = obj.name;
link.href = URL.createObjectURL(file);
link.dispatchEvent(new MouseEvent('click'));

fileEntry.file(function (file){}) 抓取文件的位置。代码工作正常,但问题是我的文件很大(500MB),当我创建 createObjectURL Chrome 时使用两倍内存,因为内容被复制到 blob 中。我唯一想要的是 "move" 文件从内部存储到用户的 "Downloads" 目录。我知道在扩展中可以使用 chrome.download API 但是这个 API 在打包的应用程序中不可用。

请改用 chrome.filesystem and chrome.storage API。首先,将权限添加到 manifest.json:

permissions: [ "storage", { "fileSystem": [ "write", "retainEntries", "directory" ] } ]

然后访问实际文件系统上的文件夹并将其保存以备后用。

chrome.fileSystem.chooseEntry({ type: "openDirectory" }, function(folder) {
 chrome.storage.local.set({ folder: chrome.fileSystem.retainEntry(folder) })
})

然后您可以恢复它并像普通目录条目一样使用它。

chrome.storage.local.get("folder", function(storage) {
 chrome.fileSystem.restoreEntry(storage.folder, function(folder) {
  entry.moveTo(folder)
}) })