【问题标题】:Cordova - Save a file to storageCordova - 将文件保存到存储
【发布时间】:2018-05-30 12:38:14
【问题描述】:

我正在制作一个需要从中导出文件的 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”。

【问题讨论】:

  • 错误是什么?与我们分享 logcat/stacktrace!请同时添加一些代码。
  • @Jordan 刚刚添加了我使用的代码! :)
  • 好的,也检查一下你的logcat,看看是否有任何提示/警告
  • 我该怎么做?我没有在模拟器中运行应用程序(在线编译:Cocoon.io)。我正在我的设备上运行它。
  • @Jordan 在我登录之前,代码不应该是正确的吗?我认为问题出在我的代码上。一个工作脚本的例子就完美了!

标签: android file cordova plugins storage


【解决方案1】:

此脚本有效:

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】:

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

    您必须写入 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-plugin-file 进行,但是您可以使用cordova-diagnostic-plugin 中的getExternalSdCardDetails() 来执行此操作。

    【讨论】:

      猜你喜欢
      • 2020-02-11
      • 2020-09-15
      • 2020-08-25
      • 1970-01-01
      • 1970-01-01
      • 2019-03-31
      • 2011-12-14
      • 2021-09-20
      • 2023-03-10
      相关资源
      最近更新 更多