Phonegap FileReader readAsText返回null但readAsDataURL有效

时间:2013-10-01 15:11:14

标签: javascript ios cordova zip fileapi

我正在使用Phonegap下载档案,解压缩,然后阅读文件。一切正常,直到我尝试将文件作为文本读取。如果我使用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
}

这是readAsText()

的evt对象
{
    "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规范中看到了File API,如果发生错误,结果只会设置为null。但是我尝试添加reader.onerror()函数,但是没有被调用。

  

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

     

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

1 个答案:

答案 0 :(得分: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。