HTML5文件API:发生错误后FileReader对象未定义

问题描述:

我在Mac OS X上使用Chrome 12,并且在文档中包含了jQuery 1.6.1。HTML5文件API:发生错误后FileReader对象未定义

我尝试使用以下代码读取文件,在读取文件时发生错误接缝,因此调用this.error.onerror(),但FileReader-Object this.reader不再存在,并且我无法得到错误。我也不确定错误发生的原因,这是我想要阅读的常规文本文档。

function FileHandler(files, action) { 
    console.log('FileHandler called.'); 

    this.files = files; 
    this.reader = new FileReader(); 
    this.action = action; 

    this.handle = function() { 
     console.log('FileHandler.handle called.'); 

     for (var i = 0; i < this.files.length; i++) { 
      this.reader.readAsDataURL(files[i]); 
     } 
    } 

    this.upload = function() { 
     console.log('FileHandler.upload called.'); 
     console.log(this.reader); 

     data = { 
      content: this.reader.result 
     } 

     console.log(data); 
    } 

    this.error = function() { 
     console.log('An error occurred while reading a file.'); 
     console.log(this.reader.error); 
    } 

    this.reader.onload = this.upload; 
    this.reader.onerror = this.error; 
} 

此代码创建以下控制台输出: http://cl.ly/0j1m3j0o3s071Y1K3A25

+0

如果你举办一个网络服务器上的文件,做你有同样的问题?如果您使用FF代替Chrome,那么您是否遇到同样的问题?如果没有,那么你可能会遇到Chrome的同源策略。在这里看到答案和评论:http://*.com/questions/4100927/chrome-filereader/4101266#comment10572715_4101266 –

.onerror,该this是不一样之外,因为它是一个新的功能(以新的范畴)。通过静态设置像这样的this

跟踪:

var _this = this; // _this won't change 
this.reader.onerror = function() { 
    console.log('An error occurred while reading a file.'); 
    console.log(_this.reader.error); 
} 
+0

我已经更新了代码,我认为它应该工作(至少它适用于this.upload )。但错误仍然发生,控制台输出相同。 –

+0

你确定它是'undefined'吗?请注意'_this'应该在'.error'之外定义。 – pimvdb

+0

请问您指的是'多个物体'究竟是什么意思? – pimvdb

这应该是正确的方式做到这一点:

reader.onerror = function(event) { 
    console.error("File could not be read: " + event.target.error); 
};