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。继续执行错误步骤。
答
您可能已经抓住了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。
这也正在杀死我。在那里看到一些奇怪的东西。一些涉及更改var名称。文件或结果中是否存在命名空间冲突? –
我不得不暂时隐藏这段代码,但我很快就会回来。我会尝试为每个阶段使用真正独特的var名称,以确保没有任何冲突。 –
在我的情况下,我认为我是抓取fileEntry而不是文件。必须做'fileEntry.file(函数(fileObject){... reader.readAsText(fileObject);})' –