【问题标题】:Replacement for fileEntry.toURL() in Chrome Packaged Apps替换 Chrome 打包应用程序中的 fileEntry.toURL()
【发布时间】:2013-04-30 10:35:57
【问题描述】:

我在Chrome Packaged App 中使用HTML5 FileSystem API 写入日志文件。我希望用户能够下载这个文件,所以我尝试了一些类似的东西:

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 的 answer 之后,我意识到我必须进一步澄清我想要什么。如果有一种技术不意味着加载 HTML5 文件系统 API 文件内容、从中构建一个 blob 并将其写入用户选择的路径(chrome.fileSystem API),那对我来说似乎特别好。

【问题讨论】:

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

标签: google-chrome fileapi google-chrome-app html5-filesystem


【解决方案1】:

您是否尝试过使用chrome.fileSystem.chooseEntry?这个 API 让你的应用程序可以将文件保存到用户的硬盘上,无论他们想要什么,让你的程序有一个另存为类型的命令。这与下载链接有点不同,但也更符合 V2 应用就像原生应用一样。

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

【讨论】:

  • 非常感谢您的快速回答。我知道 chrome.fileSystem 但我想做的是使用沙盒化的 HTML5 FileSytem API 保存一个文件(对用户来说“看不见”),但可以将它导出到这个选择的路径。您建议的路线意味着从 HTML5 存储中获取文件内容,用它创建一个新的 Blob 并将其保存到用户指定的路径中 chrome.fileSytem.chooseEntry。虽然这肯定可行,但我希望有一种更简单的技术,不需要加载文件内容。我已经在投票了,但也会等待其他答案。
  • “我想要做的是使用沙盒 HTML5 FileSytem API 持久化一个文件(用户“看不见”)”,这可能在持久化区域中吗? “但提供将其导出到此选择路径的可能性”,这正是 Ben Wells 所建议的吗?
  • 我遇到了类似的问题,最终使用了这个解决方案。对于大文件来说它相当慢,但工作正常。我认为这是一个安全问题——允许在用户不先手动选择确切路径的情况下下载文件,这会给攻击留下太多空间。
猜你喜欢
  • 2012-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-04
  • 1970-01-01
相关资源
最近更新 更多