2014-10-01 39 views
6

我在iOS(最新版本1.3.1)上使用了cordova 3.4與org.apache.cordova.file。Cordova/Phonegap - iOS文件系統自定義根路徑iosExtraFilesystems不工作

我想存儲在庫/ NoCloud目錄數據,我發現,在doc,我們應該在config.xml文件中設置此變量:

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

但它不工作,它給了我一個文件系統根在庫/文件中,我不能移動到NoCloud目錄,因爲我們無法獲得根庫/文件的父目錄。

有人也在爲這個問題苦苦掙扎嗎?你成功地使用了iosExtraFilesystems var嗎?

我試圖升級科爾多瓦,但我在做這件事時還有其他問題..我會發布進一步的進展。

UPDATE:

不與科爾多瓦3.5工作,3.6要麼,我已經在Apache的JIRA跟蹤器所造成的問題:https://issues.apache.org/jira/browse/CB-7687

感謝

蒂博

+0

我認爲這是一個文件權限問題。不是在iOS中,而是在科爾多瓦。請讓我顯示iosPersistentFileLocation的完整路徑。 – 2014-10-02 13:31:59

+0

感謝您的回答,這裏是文件系統打開的完整路徑:file:/// var/mobile/Containers/Data/Application/13E9EA83-94A2-4950-811E-E491AC176A78/Library/files/ – tdurand 2014-10-02 14:09:07

+0

ok所有文件或圖書館上方的目錄無法訪問您的應用程序。但我不與科爾多瓦合作,所以請等待來自Apache的響應。 – 2014-10-02 14:22:01

回答

11

使用resolveLocalFileSystemURL而不是requestLocalFileSystem

最簡單的方式做到這一點(因爲V1.2.0)與cordova.file.dataDirectory財產。它應該是庫-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目錄使用的位置。無論如何,庫文件系統是提供給您的應用程序(只要你有沒有下一個設置禁用它)

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

iosExtraFilesystems偏好告訴插件文件的文件系統的根,除了默認(臨時性和持久性)安裝。默認情況下,它被設置爲字符串

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

這已經包括library-nosync,所以你不應該添加它。事實上,設置它的方式實際上是從您的應用程序中刪除其他文件系統根。

+0

不知道我怎麼錯過了文檔中的resolveLocalFileSystemURL。非常感謝。 – tdurand 2014-10-07 01:19:18

+0

請注意,第二種方法將不起作用,因爲你將在圖書館/文件,並將無法去圖書館/ NoCloud – tdurand 2014-10-07 01:21:03

+1

絕對正確;我忘記了已經做出了改變;我將刪除該部分。 – 2014-10-07 13:39:26

0

所有功勞這個答案轉到魏立:https://github.com/weili-feedhenry/dotfiles/issues/1,你應該閱讀他在科爾多瓦文件系統插件上的文章: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的值,則可能需要相應地調整請求類型的值。

+0

在github上爲這個doc做了一個pull請求:https://github.com/apache/cordova-plugin-file/pull/82 – tdurand 2014-10-02 16:02:42