Phonegap FileReader readAsText返回null,但readAsDataURL的工作原理

问题描述:

我使用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。文件范围从300KB到1.4MB,但所有文件在控制台中返回null

reader.readAsText(file);   

为什么一个函数会返回一个而另一个是null?它可以读取的文字大小是否有限制?

这是file对象,我创建reader之前记录,那我申请的函数(我已经缩短了文件名):

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

这是对EVT对象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 
    } 
} 

更新:我见过的文件API导致只会被设置为空,如果错误发生了W3C规范。但我尝试添加一个reader.onerror()函数,但是没有被调用。

如果在读取blob参数期间发生错误,请将readyState 设置为DONE并将结果设置为null。继续执行错误步骤。

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

+0

这也正在杀死我。在那里看到一些奇怪的东西。一些涉及更改var名称。文件或结果中是否存在命名空间冲突? –

+0

我不得不暂时隐藏这段代码,但我很快就会回来。我会尝试为每个阶段使用真正独特的var名称,以确保没有任何冲突。 –

+1

在我的情况下,我认为我是抓取fileEntry而不是文件。必须做'fileEntry.file(函数(fileObject){... reader.readAsText(fileObject);})' –

您可能已经抓住了FileEntry的,而不是一个文件对象。假设文件实际上是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。