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

时间:2014-10-01 22:27:41

标签: ios cordova filesystems

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

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

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

但它不起作用,它给了我一个库/文件中的文件系统根目录,我无法移动到NoCloud目录,因为我们无法获取根库/文件的父目录。

有人也在为这个问题而苦苦挣扎吗?您是否成功使用了iosExtraFilesystems var?

我正在尝试升级cordova但我在做这件事时还有其他问题..我会发布进一步的进展。

更新:

不使用cordova 3.5,3.6,我在apache的jira跟踪器上创建了一个问题:https://issues.apache.org/jira/browse/CB-7687

谢谢

巴尔

2 个答案:

答案 0 :(得分:13)

使用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" />

此首选项只是告诉File插件,默认情况下,PERSISTENT文件系统应该将文件存储在设备的Library目录下。如果没有该设置,则默认值为先前Cordova版本Documents目录使用的位置。无论如何,库文件系统可供您的应用程序使用(只要您没有使用下一个设置禁用它)

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

iosExtraFilesystems首选项告诉File插件除了要安装的默认值(临时和持久)之外,还有哪些文件系统根目录。默认情况下,它设置为字符串

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

这已包含library-nosync,因此您不必添加它。实际上,按照实际的方式设置它会从应用程序中删除其他文件系统根目录。

答案 1 :(得分: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

显然,File 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的值,则可能需要相应地调整请求类型的值。