HTML5文件系统API在Android Chrome中访问SD卡

5

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

我使用了phonegap File API进行了PoC测试,所有东西都按预期运行。在Chrome桌面上使用FileSystem API也可以产生类似的结果...

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

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

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

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

1个回答

6

来自HTML5 Rocks的这篇文章

需要记住的是,这个文件系统是沙盒化的,意味着一个Web应用程序不能访问另一个应用程序的文件。这也意味着您不能读写用户硬盘驱动器上的任意文件夹(例如“我的图片”,“我的文档”等)。

FileSystem API的设计目的是允许您的应用程序创建和操作文件,这些文件将在使用您的应用程序时保留。它不能用于从其沙盒之外公开任意文件。

或者,可以使用File API读取整个系统中的文件,但无法修改它们。但是,File API无法用于读取系统上的任意文件。它的使用基于HTML的<input type=file>标签,其中用户必须明确输入要读取的文件。

以上适用于在Android Chrome中运行的应用程序以及桌面Chrome,因此除非用户愿意使用输入授予您希望访问的文件,否则您将无法使用它。然而,您提到过尝试使用PhoneGap进行PoC。虽然PhoneGap File API主要是HTML5实现的包装器,但具有一些微妙的差异,主要在于它确实允许访问SD卡上的任意文件。当使用API调用window.requestFileSystem()时,您的成功回调将有一个参数,即FileSystem对象,其中root属性是对/sdcard文件夹的引用。这可以用于遍历您的sdcard并在其中任何位置创建FileReaders和FileWriters。


嗨Matt,我也读了那篇文章,我理解它是一个沙盒fs。然而在桌面上,我能够从“我的图片”、“我的文档”和其他地方选择文件。你可以用我发布的链接自己试一下。在Android中,我无法正确选择目录,但我能够选择文件。在我做的PhoneGAP PoC中,我能够从sdcard中读取目录。我能够轻松创建DirectoryReader。我能够使用FileSystem API在Chrome桌面版中复制该PoC,但我无法在Android Chrome版本中这样做。这非常令人沮丧。 - Astronaut
1
我明白了。为了更加明确,您遇到的问题是在Android上完全无法选择目录,还是在选择目录后DirectoryReader出现了问题?此外,您发布的演示是否是您在所有平台上进行测试的代码? - MattDavis
我无法在Android中选择任何目录。演示在所有平台上都是相同的。 - Astronaut
1
移动版Chrome的文件API存在一些问题,我进行了更多的研究,并通过创建文件存储库并将其下载到永久沙盒文件系统中找到了解决方案。到目前为止它正在工作,需要创建更复杂的情景来确保这是一个可用的系统,但目前为止一切都很好。 - Astronaut

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