Skip to content

Instantly share code, notes, and snippets.

@vanduc1102
Last active August 29, 2015 14:21
Show Gist options
  • Save vanduc1102/66aff02495f9cc0099d8 to your computer and use it in GitHub Desktop.
Save vanduc1102/66aff02495f9cc0099d8 to your computer and use it in GitHub Desktop.
FileReader HTML5 AngularJS
xComponent.factory("fileReader", ["$q", "$log", function ($q, $log) {
var onLoad = function (reader, deferred, scope) {
return function () {
scope.$apply(function () {
deferred.resolve(reader.result);
});
};
};
var onError = function (reader, deferred, scope) {
return function () {
scope.$apply(function () {
deferred.reject(reader.result);
});
};
};
var onProgress = function (reader, scope) {
return function (event) {
scope.$broadcast("fileProgress",
{
total: event.total,
loaded: event.loaded
});
};
};
var getReader = function (deferred, scope) {
var reader = new FileReader();
reader.onload = onLoad(reader, deferred, scope);
reader.onerror = onError(reader, deferred, scope);
reader.onprogress = onProgress(reader, scope);
return reader;
};
var readAsDataURL = function (file, scope) {
var deferred = $q.defer();
var reader = getReader(deferred, scope);
reader.readAsDataURL(file);
return deferred.promise;
};
var isTypeValid = function (validMimeTypes, type) {
return ((validMimeTypes === (void 0) || validMimeTypes === '') || validMimeTypes.indexOf(type) > -1) && type !== null && type !== undefined && type !== '';
};
var readMultiFileAsDataUrl = function (files, scope, validMimeTypes) {
var deferred = $q.defer();
var promises = [];
for (var i = 0; i < files.length; i++) {
if (isTypeValid(validMimeTypes, files[i].type)) {
promises.push(readAsDataURL(files[i], scope));
}else{
console.log('Your file type : '+ files[i].type+ ' is not valid.');
}
}
$q.all(promises).then(function (result) {
deferred.resolve(result);
});
return deferred.promise;
};
return{
readAsDataURL: readAsDataURL,
readMultiFileAsDataUrl: readMultiFileAsDataUrl,
isTypeValid: isTypeValid
};
}]);
@vanduc1102
Copy link
Author

This is FileReader HTML5 AngularJS

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment