簡體   English   中英

Cordova-將文件保存到存儲

[英]Cordova - Save a file to storage

我正在制作需要從中導出文件的Cordova應用程序。 我想將文件保存到Android設備的存儲中: /storage/emulated/0/ 該應用程序應創建一個文件夾,在其中創建包含內容的文件。

我嘗試了cordova-plugin-file插件,但不確定如何使用。 插件的文檔中有一些示例,但我不知道使用哪個示例,有:

我嘗試了所有這些,但是它們都不起作用。

您的幫助和示例(如果可能)將不勝感激。

編輯

有我使用的代碼。 我沒有任何錯誤。

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”。

從Android 4.4開始,SD卡根目錄( /sdcard/ )是只讀的,因此您無法對其進行寫入。 假設您在示例代碼中對writeFile()引用引用了cordova-plugin-file示例 (由於未在代碼中定義),那么將使用錯誤代碼NO_MODIFICATION_ALLOWED_ERR調用fileWriter.onerror()函數。

您必須寫入SD卡上的應用程序存儲目錄(例如/sdcard/Android/data/your.app.package.id/ )。 您可以使用cordova-plugin-file作為cordova.file.externalApplicationStorageDirectory來引用此位置。

有關在不同版本的Android中訪問SD卡的詳細信息,請參見此答案

注意:以上對“ SD卡”的引用是指仿真的SD卡(在內部存儲器(即/storage/emulated/0/ )上。在某些Android設備(例如Samsung Galaxy S系列)中引用的外部/可移動SD卡是無法通過cordova-plugin-file ,但是您可以使用cordova-diagnostic-plugin中的 getExternalSdCardDetails()進行操作。

該腳本有效:

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
            });
        });
    });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM