Chrome打包应用中fileEntry.toURL()的替代方法

4
我正在使用HTML5 文件系统 APIChrome 打包应用程序中编写日志文件。我希望用户能够下载此文件,因此我尝试了类似以下的东西:
fs.root.getFile('log.txt', {create: false}, function(fileEntry) {
  var url = fileEntry.toURL();
  // do something with the file url
});

这并没有帮助,因为URL的形式类似于filesystem:chrome-extension://eekedjcagggbfigdmifkmhkjbhiklnpj/temporary/log.txt,在任何地方都不可能打开它。
您推荐使用什么技术使封装应用程序中的FileSystem API文件可下载?
编辑:阅读完Ben Well下面的答案后,我意识到我必须更明确地表达我的意思。如果有一种技术可以不涉及加载HTML5 Filesystem API文件内容,构建Blob,并使用chrome.fileSystem API将其写入用户选择的路径,那对我来说似乎特别好。

你知道打包应用程序的意图与Web应用程序不同,对吧?考虑到这一点,我认为你想要的是某种“此网站正在尝试发送内容,您是否想保留它?”这是一个Web应用程序与Web服务器通信的“事情”。如果你采用本地应用程序的思维方式,最常见的机制包括:将文件保存在某个地方,在屏幕上呈现内容或将其复制到剪贴板。帮助我们帮助你,你愿意做什么,以及为了实现目标你能够放弃什么?谢谢。 - Jayr Motta
我非常清楚为什么要将其作为打包应用程序而不是构建Web应用程序。我只是在寻找最方便的API方式来通过HTML5文件系统API保存信息(首先不需要用户进行交互),并使其可供用户保存 - 理想情况下,避免构建文件的blob对象的额外步骤。 - bfncs
1个回答

4

您尝试过使用chrome.fileSystem.chooseEntry吗?该API允许您的应用程序将文件保存到用户的硬盘上,无论他们想要保存在哪里,让您的程序具有“另存为”命令。这与下载链接有些不同,但更符合V2应用程序像本地应用程序的特点。

chrome.fileSystem弹出一个对话框,询问用户选择文件的位置。如果您使用保存文件的选项,则返回一个文件条目,该条目具有写入用户选择的位置的权限。当您使用这些选项时,用户还可以创建新文件。


1
非常感谢您的快速回复。我知道chrome.fileSystem,但我想做的是使用沙盒化的HTML5 FileSytem API将文件持久化(对用户来说是“看不见的”),但提供将其导出到所选路径的可能性。您建议的方法意味着从HTML5存储中获取文件内容,使用它创建一个新的Blob,并使用chrome.fileSytem.chooseEntry将其保存到用户指定的路径。虽然这肯定可以工作,但我希望有一种更简单的技术,不需要加载文件内容。我已经点赞了,但还会等待其他答案。 - bfncs
我想要做的是使用沙盒化的HTML5文件系统API将文件持久化(对用户来说是“看不见的”),这可以在持久区域内完成吗?但是,我想提供一种将其导出到所选路径的可能性,这正是Ben Wells建议的内容。 - Jayr Motta
我曾经遇到过类似的问题,最终采用了这个解决方案。对于大文件来说速度比较慢,但是效果还可以。我认为这是一个安全问题——允许用户在手动选择确切路径之前下载文件会留下太多攻击空间。 - kzahel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接