从assets / www目录访问文件

14

假设我有一个名为foo.html的文件,安置在我的assets/www目录中(紧挨着我的index.html)。

我想将该文件复制到设备上的另一个位置。我的第一次尝试是window.resolveLocalFileSystemURI("foo.html", cool(), notCool());,但它不起作用。即便加上前缀如www/也是这样。

想知道是否有可能通过Phonegap访问文件。我并不确定,因此想看到获取资产目录中文件的FileEntry的代码片段 - 如果可能的话。

编辑: 现在我们有了这样的调用:

window.resolveLocalFileSystemURI("file:///android_asset",
  function(entry){
    console.log(entry.fullPath);},
  function(evt){
    console.log(evt.code);}
);

但我们在使用 Phonegap v1.2 时遇到了 code: undefined 的错误,而在使用 v1.0 时则遇到了 code: 1 的错误 (code 1 = 文件未找到?!)。

3个回答

14
您想要做的事情是不可能的。位于资源目录中的文件并不在文件系统上,因此无法通过文件API进行访问。这意味着调用window.resolveLocalFileSystemURI()将无法返回FileEntry。
最好的方法是通过XHR访问这些文件。如果它们是基于文本的,您始终可以使用FileWriter将XHR结果写入文件系统。我写了一篇博客文章,展示了如何使用XHR从资源目录获取文件。

http://simonmacdonald.blogspot.com/2011/12/on-fourth-day-of-phonegapping-creating.html


我此刻没有代码,但我通过已接受的答案实现了我需要做的事情。无论如何很高兴“见到”你Simon,在phonegap群组中我读过你的许多帖子 :) - nuala
@yoshi,抱歉,你能按照Leon的答案访问资源文件吗?或者甚至获取它们的路径?我试着让它工作,但是我做不到! - lao
lucaskoala - 你能让它工作吗?我没有什么运气(我认为Simon是正确的,这是不可能的)。请参见此处:http://stackoverflow.com/questions/22948430 - Matt Grande

11

您可以通过以下方式访问文件:

window.resolveLocalFileSystemURI("file:///android_asset/www/foo.html", onResolveSuccess, onFail);
你可以使用File API中的FileEntry.copyTo或FileEntry.moveTo来实际执行操作。请注意 - 您不能直接写入到asset / www文件夹,只能写入到SD卡中。
希望这可以帮助您。

1
看起来很不错,但是它不工作 :C 总是调用失败方法。即使我尝试访问 script.js 文件而不是我的虚拟 html。我也已经仔细检查了目录。错误事件只有一个字段,即代码:未定义。 - nuala
1
你的logcat输出有什么吗? - Leon
记录错误事件只显示一个字段: code: undefined - nuala
啊,这就解释了为什么我在一个新项目中收到了错误代码1。刚刚测试并感到困惑。因此,对于v1.0,我会得到错误代码1(未找到?),而版本1.2保持沉默(代码:未定义)。我将编辑我的问题并在其中添加更多的代码。 - nuala
我只是想知道这个链接是否能帮到你,抱歉我现在没有运行模拟器,所以无法在本地测试它... - Leon
显示剩余3条评论

1
Leon:“你实际上不能将文件写入asset/www文件夹,只能写入SD卡。” 第一部分是正确的,你不能写入asset/www路径。但是,如果应用程序已安装在设备上,则可以创建并写入文件,并且该文件将在Android的根目录下创建。如果应用程序安装在SD卡上,则该文件将在SD卡的根目录下创建。因此创建的文件在清除应用程序用户数据时不会被删除或更改,并且在删除应用程序时也不会被删除。

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