2013-10-01 3 views
2

Я использую Phonegap, чтобы загрузить архив, разархивировать его, а затем прочитать файлы. Это все работает, пока я не попытаюсь прочитать файлы как текст. Если я использую readAsDataURL(), тогда я получаю целую кучу вещей, записанных на консоль.Phonegap FileReader readAsText возвращает значение null, но readAsDataURL работает

function(file) { 
    console.log(file); 
    var reader = new FileReader(); 
    reader.onloadend = function(evt) { 
     console.log(evt.target.result); 
    };      
    reader.readAsDataURL(file); 
} 

Если я использую readAsText() я получаю null. Файлы варьируются от 300 КБ до 1,4 МБ, но все файлы возвращают null в консоли.

reader.readAsText(file);   

Почему одна функция возвращает что-то, а другая должна быть нулевой? Существует ли ограничение на размер текста, который он может читать?

Это file объекта, который я вход перед созданием reader, что я применяю функцию к (Я сократил имя файла):

{ 
    "name":"categories.json", 
    "fullPath":"/var/mobile/.../Documents/data/file.json", 
    "type":null, 
    "lastModifiedDate":1380535318000, 
    "size":382456 
} 

И это объект ЭВТ для readAsText():

{ 
    "type":"loadend", 
    "bubbles":false, 
    "cancelBubble":false, 
    "cancelable":false, 
    "lengthComputable":false, 
    "loaded":0, 
    "total":0, 
    "target":{ 
     "fileName":"/var/mobile/.../Documents/data/file.json", 
     "readyState":2, 
     "result":"null", 
     "error":null, 
     "onloadstart":null, 
     "onprogress":null, 
     "onload":null, 
     "onerror":null, 
     "onabort":null 
    } 
} 

UPDATE: Я видел в W3C спецификации для API файла, что результат будет установлен только на нуль, если бы произошла ошибка. Но я попытался добавить функцию reader.onerror(), но это не вызвало вызов.

Если во время чтения параметра blob возникает ошибка, установите для readyState значение DONE и установите для результата значение null. Перейдите к шагам ошибки.

http://www.w3.org/TR/FileAPI/#dfn-readAsText

+0

Это убивает меня прямо сейчас. Увидел какой-то странный материал. Некоторые из них связаны с изменением имен переменных. Есть ли конфликт имен в файле или результат или что-то еще? –

+0

На этот раз мне нужно было спрятать этот код, но я скоро вернусь к нему. Я попытаюсь использовать действительно уникальные имена переменных для каждого этапа, чтобы убедиться, что ничто не сталкивается. –

+1

В моем случае я думаю, что я захватил файлEntry вместо файла. Должен был сделать файл 'fileEntry.file (function (fileObject) {... reader.readAsText (fileObject);})' –

ответ

4

Вы, возможно, захватывая FileEntry вместо FileObject. Предполагая, что файл был фактически FileEntry, попробуйте следующее:

var 
    fileEntry = file, //for example clarity - assumes file from OP's file param 
    reader = new FileReader() 
; 

fileEntry.file(doSomethingWithFileObject);//gets the fileObject passed to it 

function doSomethingWithFileObject(fileObject){ 

    reader.onloadend = function(e){ 
     doSomething(e.target.result); //assumes doSomething defined elsewhere 
    } 

    var fileAsText = reader.readAsText(fileObject); 
} 

Определенно API, который кричит для хлама сокращения.

Смежные вопросы