Cordova可以在iOS“文件”应用中读取/写入文件吗?

时间:2019-03-27 07:58:02

标签: cordova

有人知道是否可以通过Cordova访问iOS“文件”应用程序数据吗?即,我想将我的应用程序添加到“文件”应用程序的“位置”列表中,然后读取/写入这些文件。这可能吗?

谢谢!

3 个答案:

答案 0 :(得分:0)

您必须在Xcode中的Capabilities下设置iCloud。不要忘记为您的应用程序标识符设置容器。

也许此选项将来会对您有所帮助:

LSSupportsOpeningDocumentsInPlace

答案 1 :(得分:0)

我也遇到了这个问题并解决了。这是我所做的: 要授予文件应用访问我的应用数据的权限,我必须打开info.plist文件(只需在您的iOS平台文件夹中搜索“ info.plist”)并添加以下代码段:

<key>UIFileSharingEnabled</key>
<true/>

现在,当您单击xcode中的Ressources> info.plist文件时,您应该具有以下条目:

Screenshot Data Access

在将应用程序构建到设备上之后,文件应用程序应使您可以访问“在我(设备)上”并列出使用cordova文件插件创建的所有文件夹和文件。

答案 2 :(得分:-2)

Cordova-plugin-file实现了File API,允许对驻留在设备上的文件进行读写访问。

iOS Persistent storage location

  

有两个有效位置可将持久文件存储在iOS设备上:Documents目录和Library目录。以前版本的插件仅将持久性文件存储在Documents目录中。这样做的副作用是使应用程序的所有文件在iTunes中可见,这通常是意料之外的,尤其是对于处理大量小文件而不是生成完整的文档以进行导出的应用程序而言,这是目录的目的。 / p>      

现在可以选择是将文件存储在文档目录还是库目录中,并且可以在应用程序的config.xml file中进行选择。为此,请将这两行之一添加到config.xml

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

Write to File

一旦有了FileEntry对象,就可以通过调用createWriter来写入文件,该命令将在成功回调中返回FileWriter对象。调用FileWriter的write方法来写入文件。

function writeFile(fileEntry, dataObj) {
    // Create a FileWriter object for our FileEntry (log.txt).
    fileEntry.createWriter(function (fileWriter) {

        fileWriter.onwriteend = function() {
            console.log("Successful file write...");
            readFile(fileEntry);
        };

        fileWriter.onerror = function (e) {
            console.log("Failed file write: " + e.toString());
        };

        // If data object is not passed in,
        // create a new Blob instead.
        if (!dataObj) {
            dataObj = new Blob(['some file data'], { type: 'text/plain' });
        }

        fileWriter.write(dataObj);
    });
}

Read a file

您还需要一个FileEntry对象来读取现有文件。使用FileEntry的file属性获取文件引用,然后创建一个新的FileReader对象。您可以使用readAsText之类的方法来启动读取操作。读取操作完成后,this.result将存储读取操作的结果。

function readFile(fileEntry) {

    fileEntry.file(function (file) {
        var reader = new FileReader();

        reader.onloadend = function() {
            console.log("Successful file read: " + this.result);
            displayFileData(fileEntry.fullPath + ": " + this.result);
        };

        reader.readAsText(file);

    }, onErrorReadFile);
}