【问题标题】:HTML5 FileSystem API Android Chrome access to sdcardHTML5 FileSystem API Android Chrome 访问 sdcard
【发布时间】:2013-03-07 05:01:21
【问题描述】:

我正在尝试创建一个能够访问大量文件的 HTML5 应用程序。因此,我查看了 FileSystem API 以便能够从本地文件系统读取文件。

我使用 phonegap File API 做了一个 PoC,一切都按预期工作,我能够在 Chrome 桌面上使用 FileSystem API 产生类似的结果...

但是我面临一个严重的问题,虽然我可以在 Desktop 中访问我的文件系统,但我无法从 Android Chrome 访问 sdcard。我尝试使用这个演示:

http://html5-demos.appspot.com/static/filesystem/filer.js/demos/index.html

我可以在桌面上从我的本地系统中选择文件:我的图片等...但我不能用 Android Chrome 做同样的事情

如何在 Android Chrome 中访问设备文件系统 /sdcard?

【问题讨论】:

    标签: android html google-chrome filesystems html5-filesystem


    【解决方案1】:

    来自this article on HTML5 Rocks

    请务必记住,此文件系统是沙盒化的,这意味着一个 Web 应用程序无法访问另一个应用程序的文件。这也意味着您无法将文件读/写到用户硬盘上的任意文件夹(例如我的图片、我的文档等)。

    FileSystem API 旨在让您的应用程序创建和操作将在您的应用程序使用之间持续存在的文件。它不能用于从其沙箱外部公开任意文件。

    另外,File API 可用于从整个系统读取文件,但不能修改文件。但是,File API 不能用于读取系统上的任意文件。它的使用基于 HTMLs <input type=file> 标签,用户必须明确输入要读取的文件。

    上述内容适用于在 Android Chrome 中运行的应用,与在桌面版 Chrome 中运行的应用相同,因此除非用户愿意使用输入来授予对所需文件的访问权限,否则您会很不走运。但是,您提到您还尝试了使用 PhoneGap 的 PoC。 PhoneGap File API,虽然主要作为 HTML5 实现的包装器,但有一些细微的差别,主要是它允许访问 SD 卡上的任意文件。使用 API 调用 window.requestFileSystem() 时,您的成功回调将有一个参数,即 FileSystem 对象,其中 root 属性是对 /sdcard 文件夹的引用。这可用于遍历您的 sdcard 并在其中的任何位置创建 FileReaders 和 FileWriters。

    【讨论】:

    • 嗨,马特,我也读过那篇文章,我知道它是一个沙盒 fs。但是在桌面上,我可以从“我的图片”和“我的文档”等中选择文件。您可以使用我发布的链接自己尝试。在 Android 中,我无法正确选择目录,但我能够选择文件。我所做的 PhoneGAP PoC 能够从 sdcard 中读取目录。我能够毫无问题地创建 DirectoryReader。我能够使用 FileSystem API 在 Chrome 桌面中复制该 PoC,但我无法使用 Android Chrome 版本这样做。这很令人沮丧
    • 我明白了。只是为了更清楚一点,您遇到的问题是您根本无法在 Android 上选择目录,还是在选择目录后 DirectoryReader 出现问题?另外,您发布的演示是否是您在所有平台上进行此测试的代码?
    • 我无法在 Android 中选择目录。演示在所有平台上都是相同的。
    • 移动 chrome 上的 File API 存在一些问题,我进行了更多研究,并通过创建文件存储库并将它们下载到永久沙盒文件系统找到了解决该问题的方法。到目前为止它正在工作,需要创建更复杂的场景以确保这是一个可用的系统,但到目前为止一切都很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    • 2012-12-11
    • 1970-01-01
    • 2016-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多