Ответ 1
Я думаю, что лучшим подходом к javascript будет использование объекта HTMLImageElement с отложенным объектом:
function isImage(src) {
var deferred = $q.defer();
var image = new Image();
image.onerror = function() {
deferred.resolve(false);
};
image.onload = function() {
deferred.resolve(true);
};
image.src = src;
return deferred.promise;
}
Использование:
isImage('http://asd.com/asd/asd.jpg').then(function(test) {
console.log(test);
});
Использование HTMLImageElement
дает вам некоторые преимущества: не только он проверяет, что файл загружаемый, но также и действительный ресурс изображения, который может отображаться тегом img
.
Я завернул этот код в простой сервис, чтобы выполнить тест, и он работает:
app.controller('MainCtrl', function($scope, Utils) {
$scope.test = function() {
Utils.isImage($scope.source).then(function(result) {
$scope.result = result;
});
};
});
app.factory('Utils', function($q) {
return {
isImage: function(src) {
// ... above code for isImage function
}
};
});