27

I want to read a csv file and get its content by using AngularJS and HTML5. I want to put the content of the csv file in $scope.

I have this code in my html

 <table align="center" >
            <tr class="borderless">
                <td>Choose .csv file</td>
                <td><input type="file" name="readCsvFile" id="readCsvFile" accept=".csv"> </td>
                <td><input type="button" value="Upload" ng-click="uploadCsvFile()"></td>
            </tr>
 </table>

1 Answer 1

46

with a custom directive:

app.directive('fileReader', function() {
  return {
    scope: {
      fileReader:"="
    },
    link: function(scope, element) {
      $(element).on('change', function(changeEvent) {
        var files = changeEvent.target.files;
        if (files.length) {
          var r = new FileReader();
          r.onload = function(e) {
              var contents = e.target.result;
              scope.$apply(function () {
                scope.fileReader = contents;
              });
          };

          r.readAsText(files[0]);
        }
      });
    }
  };
});

http://plnkr.co/edit/eeQbR65oE8iljm7ueGhX?p=preview

Sign up to request clarification or add additional context in comments.

8 Comments

As a side note, you can use r.readAsDataURL(files[0]); so you can later output that file to an <img>
the result does not include the newline character ??, how do I know if a new line ??. Otherwise it works well
Can this be adapted to read csv files as JSON ? I don't see how FileReader can do this
@OsamaSalama sure you can: scope.fileReader = JSON.parse(contents)
Hi MajoB,is there a chance to do it without using directives?
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.