Phonegap FileReader readAsText returns null but readAsDataURL works
我正在使用Phonegap下载档案,将其解压缩,然后阅读文件。一切正常,直到我尝试以文本形式读取文件。如果使用
1 2 3 4 5 6 7 8 | function( file ) { console.log(file); var reader = new FileReader(); reader.onloadend = function( evt ) { console.log( evt.target.result ); }; reader.readAsDataURL( file ); } |
如果使用
1 | reader.readAsText( file ); |
为什么一个函数返回某些内容而另一个为null?它可以读取的文字大小有限制吗?
这是在创建
1 2 3 4 5 6 7 | { "name":"categories.json", "fullPath":"/var/mobile/.../Documents/data/file.json", "type":null, "lastModifiedDate":1380535318000, "size":382456 } |
这是
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | { "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 } } |
更新:我在W3C规范中看到了File API,只有在发生错误时,结果才会设置为null。但是我尝试添加
If an error occurs during reading the blob parameter, set readyState
to DONE and set result to null. Proceed to the error steps.http://www.w3.org/TR/FileAPI/#dfn-readAsText
您可能正在获取fileEntry而不是fileObject。假设文件实际上是fileEntry,请尝试以下操作:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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。