Cordova - 将文件保存到存储

时间:2017-12-16 15:04:20

标签: android file cordova plugins storage

我正在制作一个我需要导出文件的Cordova应用程序。我想将文件保存到Android设备的存储空间:/storage/emulated/0/。应用程序应该创建一个文件夹,在其中创建一个包含内容的文件。

我尝试了cordova-plugin-file插件,但我不确定如何使用它。 plugin's documentation上有一些例子,但我不知道要使用哪一个,有:

我尝试了所有这些,但没有一个能奏效。

非常感谢您的帮助和示例(如果可能)。

修改

我使用过的代码。我没有收到任何错误。

function createFile(dirEntry, fileName, fileContent, isAppend) {
    dirEntry.getFile(fileName, {create: true, exclusive: false}, function(fileEntry) {
        writeFile(fileEntry, fileContent, isAppend);
    }, fail);
}

function savePasswords(fileSystem) {
    createFile("/sdcard/testFolder", "testfile.txt", "TEST", true);
}

function fail(error) {
    alert("ERROR: " + error.code);
}

function request() {
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, savePasswords, fail);
}

document.addEventListener("deviceready", request, false);

我想要这个来创建文件" testfile.txt"内容" TEST"在名为" testFolder"。

的文件夹中

2 个答案:

答案 0 :(得分:0)

自Android 4.4起,SD卡根目录(/sdcard/)是只读的,因此您无法写入。假设您在示例代码中引用writeFile()引用了cordova-plugin-file example(因为它未在您的代码中定义),那么fileWriter.onerror()函数将被调用,错误代码为{ {1}}。

您必须写入SD卡上的应用程序存储目录(例如NO_MODIFICATION_ALLOWED_ERR)。 您可以使用/sdcard/Android/data/your.app.package.id/作为cordova-plugin-file来引用此位置。

有关不同Android版本中SD卡访问的详细信息,请参阅this answer

注意:上面提到" SD卡"请参阅模拟SD卡(内部存储器(即cordova.file.externalApplicationStorageDirectory)。无法通过/storage/emulated/0/参考某些Android设备(例如Samsung Galaxy S系列)中的外部/可移动SD卡,但是可以使用getExternalSdCardDetails()中的cordova-diagnostic-plugin来执行此操作。

答案 1 :(得分:0)

此脚本有效:

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(["Content if there's nothing!"], { type: 'text/plain' });
        }

        fileWriter.write(dataObj);
    });
}

window.resolveLocalFileSystemURL(cordova.file.externalRootDirectory, function (rootDirEntry) {
        rootDirEntry.getDirectory(fileDir, { create: true }, function (dirEntry) {
            var isAppend = true;
            dirEntry.getFile(fileName, { create: true }, function (fileEntry) {
                writeFile(fileEntry, "Content!", isAppend);
                // Success
            });
        });
    });