angular.module('focaDirectivas') .directive('ngFileModel', ['$parse', function ($compile) { return { restrict: 'A', link: function (scope, element, attrs) { var model = $compile(attrs.ngFileModel); var isMultiple = attrs.multiple; var modelSetter = model.assign; element.bind('change', function () { var promesas = []; angular.forEach(element[0].files, function (item) { promesas.push(new Promise(function(resolve, reject) { var reader = new FileReader(); reader.readAsDataURL(item); reader.onload = function(){ var value = { name: item.name, url: URL.createObjectURL(item), size: item.size, base64: reader.result, _file: item }; resolve(value); }; reader.onerror = function (error) { reject(error); }; })); }); Promise.all(promesas).then(function(values) { scope.$apply(function () { if (isMultiple) { modelSetter(scope, values); } else { modelSetter(scope, values[0]); } }); }); }); } }; }]);