Ошибка FileReader (cordova-plugin-file) - PullRequest
0 голосов
/ 20 октября 2019

Я пытаюсь читать и записывать файлы, используя плагин cordova-plugin-file. Запись файлов, кажется, работает нормально, но когда я захожу, чтобы прочитать файл, он не работает, и запускается настроенный мной обратный вызов сбоя.


function getData(fetch) {
    alert('Getting data')
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function (fs) {
    fs.root.getFile(department + ".txt", { create: false, exclusive: false }, function (fileEntry) {
        alert('reading this file: ' + JSON.stringify(fileEntry))
        readFile(fileEntry);
    }, addDepartment);
    });

    if (typeof sessionStorage.currentGroup != 'undefined') {groupData = dataActive[sessionStorage.currentGroup];}
    if (typeof sessionStorage.currentSubgroup != 'undefined') {subgroupData = groupData[sessionStorage.currentSubgroup];}
    if (typeof sessionStorage.currentItem != 'undefined') {itemData = subgroupData[sessionStorage.currentItem];}
    if (typeof itemData != 'undefined') {
    UCC = itemData.UCC;
    GTIN = itemData.GTIN;
    ProductionDate = itemData.ProductionDate;
    Weight = itemData.Weight;
    SerialNum = itemData.SerialNum;
    }
    fetch();
}


function readFile(fileEntry) {
    alert('Reading file')

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

        reader.onloadend = function() {
            console.log("Successful file read: " + this.result);
            window.dataActive = JSON.parse(this.result);
            alert('dataActive was read as: ' + dataActive)
            displayFileData(fileEntry.fullPath + ": " + this.result);
        };
        reader.readAsText(file);

    }, alert('failed to read file!'));
}

Я получаю сообщение «не удалось прочитать файл»и остальная часть кода не может быть запущена, потому что нет данных (которые мне нужны из файла). Я немного новичок в JavaScript и PhoneGap / Cordova,

Обновление

Я попытался отладить свой код, потому что он был полон проблем, но теперь я дошел до минимумаи я дважды проверил все, и я до сих пор не знаю, в чем проблема. Я так внимательно следил за примерами документации (https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-file/), и это просто не сработало. Я продолжаю получать значение NULL при чтении файла. Мой код ниже:


window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function (fs) {

    fs.root.getFile("newPersistentFile.txt", { create: true, exclusive: false }, function (fileEntry) {
        alert(JSON.stringify(fileEntry))
        // fileEntry.name == 'someFile.txt'
        // fileEntry.fullPath == '/someFile.txt'
        writeFile(fileEntry, 'sample text');
        readFile(fileEntry);

    }, function() {alert('onErrorCreateFile')});

}, function() {alert('onErrorLoadFs')});

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

    }, function() {alert('onErrorReadFile')});
}

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

        fileWriter.onwrite = function() {
            alert("Successful file write...");
            readFile(fileEntry);
            alert('Contents are: ' + this.result);
        };

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

        fileWriter.write(dataObj);
    });
}


Ответы [ 2 ]

0 голосов
/ 25 октября 2019

Я наконец получил это! Честно говоря, я не уверен, что я сделал неправильно в первую очередь, но после вращения моих колес, что казалось вечностью, я наконец заставил его работать. Вот мой кодЭто всего лишь пример, так что он на самом деле не делает ничего полезного, но если у кого-то есть такая же проблема, надеюсь, это тоже поможет, и он может отредактировать его так, как ему нужно.



window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function (fs) {

    fs.root.getFile("newPersistentFile2.txt", { create: true, exclusive: false }, function (fileEntry) {
        // fileEntry.name == 'someFile.txt'
        // fileEntry.fullPath == '/someFile.txt'
        //var sample = new Blob(['some file data'], { type: 'text/plain' }); this works too or you can just use ['some file data'] like below
        writeFile(fileEntry, ['some file data']);

    }, function() {alert('onErrorCreateFile')});

}, function() {alert('onErrorLoadFs')});

function readFile(fileEntry) {

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

        reader.onload = function() {
            alert("Successful file read: " + this.result);
            //displayFileData(fileEntry.fullPath + ": " + this.result);
        };

        reader.readAsText(file);

    }, function() {alert('onErrorReadFile')});
}

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

        fileWriter.onwrite = function() {
            alert("Successful file write...");
            readFile(fileEntry);
        };

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

        fileWriter.write(dataObj);
    });
}



0 голосов
/ 20 октября 2019

Параметр, который вы используете, не совпадает с функцией внутри. Ваш код должен выглядеть так:

function readFile(fileEntry) {
    alert('Reading file')

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

        reader.onloadend = function() {
            console.log("Successful file read: " + this.result);
            window.dataActive = JSON.parse(this.result);
            alert('dataActive was read as: ' + dataActive)
            displayFileData(fileEntry.fullPath + ": " + this.result);
        };
        reader.readAsText(fileEntry);

    }, alert('failed to read file!'));
}
...