Javascript FileReader 在第一次尝试时工作,但不再工作(没有更改代码行)
Javascript FileReader worked on first try, but not anymore (no line of code has been changed)
所以我实现了一个 html 输入元素来上传文本文件。然后我想读取文本的内容并保存到一个字符串数组中。为此(我正在使用 Angular 2)我导入了 filereader npm package 以使用 readAsText 函数。现在,当我第一次尝试时,它成功了!它打印为文本,从文件中读入控制台。
然后我删除了 console.log(line) 函数,从那时起我得到以下错误:"cannot read as File: {}".我试图重新添加 console.log(line) 函数,但我一直收到同样的错误。我在文件读取器使用它之前记录了文件变量,并获得了关于文件的信息。我也尝试了不同的文件,也清除了输入 (el.nativeElement.firstElementChild.value = null),但仍然是同样的错误。
html:
<input hidden="true" type="file" id="fileUpload" (change)="SendSurveyDataToBackend()" [attr.multipleFiles]="multipleFiles ? true : null">
js:
SendSurveyDataToBackend(){
let inputEl = this.el.nativeElement.firstElementChild;
document.getElementById('csvUpload').style.color = "white";
if (inputEl.files.length == 0 || inputEl.files.length > 1) {
document.getElementById('csvUpload').style.color = "red";
return;
}
let file = null;
file = inputEl.files[0];
let FileReader = require('filereader');
const reader = new FileReader();
let surveyDataSetsAsStrings:string[] = [];
let surveyDataSets:SurveyData[] = [];
reader.onload = (event) => {
const file = event.target.result;
const allLines = file.split(/\r\n|\n/);
// Reading line by line
allLines.map((line) => {
surveyDataSetsAsStrings.push(line.toString)
console.log(line);
});
};
reader.onerror = (evt) => {
alert(evt.target.error.name);
};
reader.readAsText(file);
for(var i = 0; i < surveyDataSetsAsStrings.length; i++){
surveyDataSets[i].Id = parseInt(surveyDataSetsAsStrings[i].substring(0,2));
surveyDataSets[i].Date = new Date(surveyDataSetsAsStrings[i].substring(42,61));
surveyDataSets[i].PlayerCode = (surveyDataSetsAsStrings[i].substring(63,73));
}
this.el.nativeElement.firstElementChild.files = null;
this.el.nativeElement.firstElementChild.value = null;
this.dataService.updateSurveyParticipants(surveyDataSets).subscribe( response => {
if(response == 'success') // Http OK
window.location.reload();
else
document.getElementById('csvUpload').style.color = "red";
});
}
知道是什么原因造成的吗?
事实证明,我只需要删除以下代码行就可以了...
let FileReader = require('filereader');
糟糕...看来我确实在运行后更改了一行代码...
所以我实现了一个 html 输入元素来上传文本文件。然后我想读取文本的内容并保存到一个字符串数组中。为此(我正在使用 Angular 2)我导入了 filereader npm package 以使用 readAsText 函数。现在,当我第一次尝试时,它成功了!它打印为文本,从文件中读入控制台。
然后我删除了 console.log(line) 函数,从那时起我得到以下错误:"cannot read as File: {}".我试图重新添加 console.log(line) 函数,但我一直收到同样的错误。我在文件读取器使用它之前记录了文件变量,并获得了关于文件的信息。我也尝试了不同的文件,也清除了输入 (el.nativeElement.firstElementChild.value = null),但仍然是同样的错误。
html:
<input hidden="true" type="file" id="fileUpload" (change)="SendSurveyDataToBackend()" [attr.multipleFiles]="multipleFiles ? true : null">
js:
SendSurveyDataToBackend(){
let inputEl = this.el.nativeElement.firstElementChild;
document.getElementById('csvUpload').style.color = "white";
if (inputEl.files.length == 0 || inputEl.files.length > 1) {
document.getElementById('csvUpload').style.color = "red";
return;
}
let file = null;
file = inputEl.files[0];
let FileReader = require('filereader');
const reader = new FileReader();
let surveyDataSetsAsStrings:string[] = [];
let surveyDataSets:SurveyData[] = [];
reader.onload = (event) => {
const file = event.target.result;
const allLines = file.split(/\r\n|\n/);
// Reading line by line
allLines.map((line) => {
surveyDataSetsAsStrings.push(line.toString)
console.log(line);
});
};
reader.onerror = (evt) => {
alert(evt.target.error.name);
};
reader.readAsText(file);
for(var i = 0; i < surveyDataSetsAsStrings.length; i++){
surveyDataSets[i].Id = parseInt(surveyDataSetsAsStrings[i].substring(0,2));
surveyDataSets[i].Date = new Date(surveyDataSetsAsStrings[i].substring(42,61));
surveyDataSets[i].PlayerCode = (surveyDataSetsAsStrings[i].substring(63,73));
}
this.el.nativeElement.firstElementChild.files = null;
this.el.nativeElement.firstElementChild.value = null;
this.dataService.updateSurveyParticipants(surveyDataSets).subscribe( response => {
if(response == 'success') // Http OK
window.location.reload();
else
document.getElementById('csvUpload').style.color = "red";
});
}
知道是什么原因造成的吗?
事实证明,我只需要删除以下代码行就可以了...
let FileReader = require('filereader');
糟糕...看来我确实在运行后更改了一行代码...