代码之家  ›  专栏  ›  技术社区  ›  Toufic Batache

Cordova-将文件保存到存储器

  •  2
  • Toufic Batache  · 技术社区  · 7 年前

    我正在制作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);
    

    我想用它在一个名为“testFolder”的文件夹中创建一个内容为“TEST”的文件“testfile.txt”。

    2 回复  |  直到 7 年前
        1
  •  4
  •   Toufic Batache    7 年前

    此脚本工作:

    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
                });
            });
        });
    
        2
  •  1
  •   DaveAlden    7 年前

    自Android 4.4以来,SD卡根目录( /sdcard/ )是只读的,因此您无法对其进行写入。假设您引用 writeFile() 在您的示例中,代码引用 cordova-plugin-file example (因为它没有在代码中定义),那么 fileWriter.onerror() 将使用错误代码调用函数 NO_MODIFICATION_ALLOWED_ERR .

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

    看见 this answer 有关不同版本Android中SD卡访问的详细信息。

    注:以上提及的“SD卡”指的是模拟SD卡(在内部存储器上(即。 /storage/emulated/0/ ). 无法通过以下方式引用某些Android设备(如三星Galaxy S系列)中的外部/可移动SD卡 cordova插件文件 ,但您可以使用 getExternalSdCardDetails() 从…起 cordova-diagnostic-plugin 这样做。