Read a file and parse its content

AngularAngular5

Angular 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);

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionKarthikView Question on Stackoverflow
Solution 1 - AngularAravindView Answer on Stackoverflow
Solution 2 - Angularbryan60View Answer on Stackoverflow
Solution 3 - AngularRezaView Answer on Stackoverflow
Solution 4 - AngularkatwekibsView Answer on Stackoverflow
Solution 5 - Angularachref akroutiView Answer on Stackoverflow