Cordova / Phonegap - iOS文件系统自定义根路径iosExtraFilesystems无法正常工作

7

我正在使用cordova 3.4和org.apache.cordova.file在iOS上(最新版本1.3.1)。

我想将数据存储在Library / NoCloud目录中,我发现在文档中,我们应该在config.xml中设置这些变量:

<preference name="iosPersistentFileLocation" value="Library" />
<preference name="iosExtraFilesystems" value="library-nosync" />

但是它没有起作用,它给了我一个文件系统根目录在Library/files中,而且我不能移动到NoCloud目录,因为我们无法获得根Library/files的父级。
有人也遇到这个问题吗?您成功使用iosExtraFilesystems变量了吗?
我正在尝试升级cordova,但我遇到其他问题...我将发布进一步的进展。
更新:
使用cordova 3.5、3.6也不起作用,我已经在apache的jira跟踪器上创建了一个问题:https://issues.apache.org/jira/browse/CB-7687 谢谢,
Thibault

我认为这是一个文件权限问题,不是在iOS中,而是在Cordova中。请让我展示从iosPersistentFileLocation开始的完整路径。 - Mirko Brunner
谢谢您的回答,这是文件系统打开的完整路径:file:///var/mobile/Containers/Data/Application/13E9EA83-94A2-4950-811E-E491AC176A78/Library/files/ - tdurand
好的,所有在Library目录上面的文件或文件夹对于你的应用程序都是不可访问的。但是我不使用Cordova,所以请等待Apache的回复。 - Mirko Brunner
是的,但我应该能够在Library/NoCloud打开文件系统。我不想打开Library上面的任何东西。 - tdurand
2个回答

14

使用 resolveLocalFileSystemURL 而不是 requestLocalFileSystem

自从 v1.2.0 以来,最简单的方法是使用 cordova.file.dataDirectory 属性。它应该是一个指向 library-nosync 目录的路径。您可以与 resolveLocalFileSystemURL 结合使用,以获取一个目录条目对象,在其中可以创建文件。

类似以下内容应该可以工作:

resolveLocalFileSystemURL(cordova.file.dataDirectory, function(entry) {
    console.log("Success! Got a DirectoryEntry");
    // Do more things with `entry` here
}, function(error) {
    console.error("Something bad happened, and we didn't get a DirectoryEntry");
});

一些其他注意事项

为了澄清您在问题中提到的两个设置:

<preference name="iosPersistentFileLocation" value="Library" />

这个设置只是告诉文件插件,默认情况下,PERSISTENT 文件系统应该将文件存储在设备的 Library 目录下。如果没有这个设置,Cordova 的早期版本将默认使用 Documents 目录。无论如何,只要您没有使用下一个设置禁用它,Library 文件系统就可用于您的应用程序。

<preference name="iosExtraFilesystems" value="library-nosync" />

iosExtraFilesystems偏好设置告诉文件插件安装哪些文件系统根目录,除了默认的(临时和持久性)之外。默认情况下,它被设置为字符串

"library,library-nosync,documents,documents-nosync,cache,bundle,root"

这已经包括了library-nosync,所以您不需要再添加它。实际上,按照您的方式设置会从应用程序中删除其他文件系统根目录。


不确定我是如何在文档中错过了resolveLocalFileSystemURL。非常感谢。 - tdurand
请注意,第二种方法行不通,因为您将位于Library/files目录下,无法进入Library/NoCloud目录。 - tdurand
1
完全正确;我忘记了那个更改已经被做出了;我会删除那一部分。 - Ian Clelland

0
所有的荣誉归功于Wei Li:https://github.com/weili-feedhenry/dotfiles/issues/1,你应该阅读他关于cordova文件系统插件的帖子:http://web.archive.org/web/20160731021013/http://www.feedhenry.com/several-ways-avoid-problems-cordova-file-api-mobile-apps 显然,文件API文档已经过时了,为了检索所需的文件系统,您需要在requestFileSystem调用中更改请求文件系统类型。 例如:
window.requestFileSystem(3, 0, function(fs){
  alert("dataDirectory = " + cordova.file.dataDirectory);
  alert("root = " + fs.root.toURL());
  fs.root.getFile("test.txt", {create: true, exclusive: true});

}, function(){
  alert("failed to get file system”)
});

请注意上述调用中的文件系统类型为“3” - 这是因为您只在config.xml文件中添加了以下首选项:

如果您更改了iosExtraFilesystems的值,则可能需要相应地调整请求类型的值。

在 GitHub 上为文档做了一个拉取请求:https://github.com/apache/cordova-plugin-file/pull/82 - tdurand

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