要总结我的问题,我需要从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
答案 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);