Read a file and parse its content
AngularAngular5Angular Problem Overview
I have file upload control which holds the selected file as below,
<div class="Block">
<label id="lbl">File </label>
<input #fileInput type='file'/>
</div>
I have a submit button as below,
<button type="button" class="btn btn-primary"
(click)="uploadDocument()">Upload File</button>
When I select a file and click on the upload button the file I need the contents inside the file without sending it to the server and reading from there.
Note: Type of file will be csv
Angular Solutions
Solution 1 - Angular
You can use FileReader
in javascript to achieve this as its a csv
file
Add a file change event to store the file in a object as below,
<div class="Block">
<label id="lbl">Code </label>
<input type='file' (change)="fileChanged($event)">
</div>
The function should set the file to an object which is used later
file:any;
fileChanged(e) {
this.file = e.target.files[0];
}
When the submit button is clicked you can use the readAsText()
method of FileReader
in javascript to get the content as below,
uploadDocument(file) {
let fileReader = new FileReader();
fileReader.onload = (e) => {
console.log(fileReader.result);
}
fileReader.readAsText(this.file);
}
Note: onload
event will be fired after the content is read so your logic should be inside the onLoad
function.
Solution 2 - Angular
you pull the file out of the input and use the FileReader API
readFile(file: File) {
var reader = new FileReader();
reader.onload = () => {
console.log(reader.result);
};
reader.readAsText(file);
}
Solution 3 - Angular
if you want to make it as function you can do
readFileContent(file: File): Promise<string> {
return new Promise<string>((resolve, reject) => {
if (!file) {
resolve('');
}
const reader = new FileReader();
reader.onload = (e) => {
const text = reader.result.toString();
resolve(text);
};
reader.readAsText(file);
});
}
then
const fileContent = await readFileContent(file);
Solution 4 - Angular
For those asking how to get string data after reading it, the data is in the result
property of fileReader
. Check the code sample below.
let fileString:any= "";
uploadDocument(file) {
let fileReader = new FileReader();
fileReader.onloadend = (e) => {
//console.log(myReader.result);
// Entire file
console.log(myReader.result);
// By lines
var lines = myReader.result.split('\n');
for(var line = 0; line < lines.length; line++){
console.log(lines[line]);
}
this.fileString = myReader.result;
};
fileReader.readAsText(this.file);
}
Solution 5 - Angular
> it works, try like this..
var reader = new FileReader();
reader.onloadend =(e) =>{
var result = reader.result;
console.log(i+'/'+result)
this.file64.push(result)
};
reader.readAsDataURL(file);