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)
}) })
所以在我的应用程序中,有一个由我的应用程序创建的本地存储(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)
}) })