Question: Hi Im new in angular js and I want to try get the data of my `input type = "file"` in my html.. But when i console it its just said undefined 

html

```
   <input type="file" ng-model="data.img" ng-click="upload()"/>

```

js

```
   $scope.upload = function() {
                console.log($scope.data.img)

            }

```

Answer: 
ng-model does not support for file type input. Need to set the value manually to ngModel using a directive like this 

```
.directive("filesInput", function() {
  return {
    require: "ngModel",
    link: function postLink(scope,elem,attrs,ngModel) {
      elem.on("change", function(e) {
        var files = elem[0].files;
        ngModel.$setViewValue(files);
      })
    }
  }
})

```

call the directive like this 

```
<input type="file" files-input ng-model="data.img" ng-click="upload()"/>

```

now check the console
* You could go with `directive` under this discussion : [ng-model for <input type="file"/>](https://stackoverflow.com/questions/17063000/ng-model-for-input-type-file)

---

* But Instead of `directive` the easiest is to use HTML5 API, namely [`FileReader`](http://jsfiddle.net/f8Hee/1/) HTML is pretty straightforward:

Add

In your controller define 'add' method:

```
$scope.add = function(){
  var f = document.getElementById('file').files[0],
      r = new FileReader();
  r.onloadend = function(e){
    var data = e.target.result;
    //send your binary data via $http or $resource or do anything else with it
  }
  r.readAsBinaryString(f);
}

```

Reference [here](https://stackoverflow.com/questions/18571001/file-upload-using-angularjs)