FileReader的onload功能未触发

时间:2019-06-24 10:09:55

标签: javascript typescript filereader

要总结我的问题,我需要从android设备读取csv文件。我目前使用JavaScript中的FileReader。我的代码是一个月前编写的,并且可以正常工作,但是当我再次检查功能时,我发现onload函数甚至没有触发。

在控制台日志中,我可以看到我的对象已在onload中加载了该功能,文件及其内容也被读取。我将在代码片段中附加以下内容。

readCSVFile(input: HTMLInputElement) {

    var content = this.csvContent;
    const files = input.files;
    console.log("files: ", files);

    if (files && files.length) {

      const fileToRead = files[0];
      console.log("step1");
      var fileReader = new FileReader();

      console.log("state 1: ", fileReader.readyState); //prints undefined, but should have been "0"

      fileReader.onload = this.onFileLoad.bind(this);
      console.log("fileReader: ", fileReader);
      fileReader.readAsText(fileToRead, "UTF-8");
      console.log("fileReader 2: ", fileReader.onload);
      console.log("state 3: ", fileReader.readyState);
   }
}

我认为'onFileLoad'文件不相关,但是它的第一行是console.log("something"),在控制台中看不到它。 以下是控制台的一些输出:

fileReader 2:  ƒ (fileLoadedEvent) {
        console.log("step2");
        var textFromFileLoaded = fileLoadedEvent.target.result;
        this.csvContent = textFromFileLoaded;
        console.log("Continut: ", t…

state 1:  undefined

2 个答案:

答案 0 :(得分:0)

给出FileReader.toString()的输出为as per your comment

  

“ function(){
  this._readyState = 0;
  this._error = null;
  this._result = null;
  this._progress = null;
  this._localURL ='';
  this._realReader = origFileReader吗?新的origFileReader():{}; // eslint-disable-line new-cap
  }“

这意味着您不是在处理Web-API的FileReader,而是在处理某种包装对象。

由于它在没有原始行为的情况下覆盖了原始名称空间,因此在您的位置,我将摆脱设置该包装程序的任何设置。但是,如果您确实希望保留此废话,则它的._realReader属性似乎将是一个真正的FileReader,您可以与之正常交互。

答案 1 :(得分:-1)

您可以尝试不关闭。 IE: fileReader.onload = function(ev){//代码在这里} .bind(this);