2016-06-23 18:39:18 +02:00
|
|
|
(function () {
|
|
|
|
'use strict';
|
|
|
|
|
2017-03-28 02:35:24 +02:00
|
|
|
angular.module('ariaNg').factory('ariaNgFileService', ['$window', function ($window) {
|
2016-06-26 15:40:56 +02:00
|
|
|
var isSupportFileReader = !!$window.FileReader;
|
2016-06-23 18:39:18 +02:00
|
|
|
|
|
|
|
var getAllowedExtensions = function (fileFilter) {
|
|
|
|
var extensions = [];
|
|
|
|
|
|
|
|
if (!fileFilter || fileFilter.length < 1) {
|
|
|
|
extensions.push(/.+$/);
|
|
|
|
return extensions;
|
|
|
|
}
|
|
|
|
|
|
|
|
var fileFilters = fileFilter.split(',');
|
|
|
|
|
|
|
|
for (var i = 0; i < fileFilters.length; i++) {
|
|
|
|
var extension = fileFilters[i];
|
|
|
|
|
2016-08-01 19:26:10 +02:00
|
|
|
if (extension === '*.*') {
|
2016-06-23 18:39:18 +02:00
|
|
|
extensions.push(/.+$/);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
extension = extension.replace('.', '\\.');
|
|
|
|
extension = extension + '$';
|
|
|
|
|
|
|
|
extensions.push(new RegExp(extension));
|
|
|
|
}
|
|
|
|
|
|
|
|
return extensions;
|
|
|
|
};
|
|
|
|
|
|
|
|
var checkFileExtension = function (fileName, extensions) {
|
|
|
|
if (!extensions || extensions.length < 1) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
for (var i = 0; i < extensions.length; i++) {
|
|
|
|
if (extensions[i].test(fileName)) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return false;
|
|
|
|
};
|
|
|
|
|
|
|
|
return {
|
2018-05-09 18:42:09 +02:00
|
|
|
openFileContent: function (fileFilter, successCallback, errorCallback, element) {
|
2016-06-23 18:39:18 +02:00
|
|
|
if (!isSupportFileReader) {
|
2017-03-28 02:35:24 +02:00
|
|
|
if (errorCallback) {
|
|
|
|
errorCallback('Your browser does not support loading file!');
|
|
|
|
}
|
|
|
|
|
2016-06-23 18:39:18 +02:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
var allowedExtensions = getAllowedExtensions(fileFilter);
|
|
|
|
|
2018-05-09 18:42:09 +02:00
|
|
|
if (!element || !element.change) {
|
|
|
|
element = angular.element('<input type="file" style="display: none"/>');
|
|
|
|
}
|
|
|
|
|
|
|
|
if (element.attr('data-ariang-file-initialized') !== 'true') {
|
|
|
|
element.change(function () {
|
|
|
|
if (!this.files || this.files.length < 1) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
var file = this.files[0];
|
|
|
|
var fileName = file.name;
|
2016-06-23 18:39:18 +02:00
|
|
|
|
2018-05-09 18:42:09 +02:00
|
|
|
if (!checkFileExtension(fileName, allowedExtensions)) {
|
|
|
|
if (errorCallback) {
|
|
|
|
errorCallback('The selected file type is invalid!');
|
|
|
|
}
|
2016-06-23 18:39:18 +02:00
|
|
|
|
2018-05-09 18:42:09 +02:00
|
|
|
return;
|
2017-03-28 02:35:24 +02:00
|
|
|
}
|
|
|
|
|
2018-05-09 18:42:09 +02:00
|
|
|
var reader = new FileReader();
|
2016-06-23 18:39:18 +02:00
|
|
|
|
2018-05-09 18:42:09 +02:00
|
|
|
reader.onload = function () {
|
|
|
|
var result = {
|
|
|
|
fileName: fileName,
|
|
|
|
base64Content: this.result.replace(/.*?base64,/, '')
|
|
|
|
};
|
2016-06-23 18:39:18 +02:00
|
|
|
|
2018-05-09 18:42:09 +02:00
|
|
|
if (successCallback) {
|
|
|
|
successCallback(result);
|
|
|
|
}
|
2016-06-23 18:39:18 +02:00
|
|
|
};
|
|
|
|
|
2018-05-09 18:42:09 +02:00
|
|
|
reader.onerror = function () {
|
|
|
|
if (errorCallback) {
|
|
|
|
errorCallback('Failed to load file!');
|
|
|
|
}
|
|
|
|
};
|
2016-06-23 18:39:18 +02:00
|
|
|
|
2018-05-09 18:42:09 +02:00
|
|
|
reader.readAsDataURL(file);
|
|
|
|
}).attr('data-ariang-file-initialized', 'true');
|
|
|
|
}
|
2016-06-23 18:39:18 +02:00
|
|
|
|
2018-05-09 18:42:09 +02:00
|
|
|
element.trigger('click');
|
2016-06-23 18:39:18 +02:00
|
|
|
}
|
2016-12-10 18:50:25 +01:00
|
|
|
};
|
2016-06-23 18:39:18 +02:00
|
|
|
}]);
|
2016-08-01 16:49:16 +02:00
|
|
|
}());
|