¿Cómo leer datos binarios en AngularJS en un ArrayBuffer?

En AngularJS hay $http.get para obtener datos dinámicamente. Desafortunadamente, del documento oficial no es fácil entender cómo leer datos binarios (por ejemplo, para la manipulación de imágenes).

El get predeterminado obtiene los datos como una String ( verlo en un plunker ). Esto es muy engorroso . Entonces, ¿cómo obtenerlo en un ArrayBuffer ? (Tenga en cuenta que desde XHR2 esto ya es posible ).

    Using $http.get to read binary data   

$http to load binary data


{{info}}
// Controller function FetchCtrl($scope, $http) { // See note 1 $scope.URL = "http://sofes.miximages.com/angularjs/Lenna.png"; $scope.info = "Click 'fetch' to fetch an image" ; $scope.fetch = function() { delete $http.defaults.headers.common['X-Requested-With']; // See note 2 $http.get($scope.URL). success(function(data) { $scope.info = "Read '" + $scope.URL + "' with " + data.length + " chars in a variable of type '" + typeof(data) + "'"; }).error(function(data, status) { $scope.info = "Request failed with status: " + status; }); }; }

Nota 1: El tamaño del archivo original es 473.831 bytes.
Nota 2: Si la imagen a recuperar pertenece a un dominio diferente, puede ser necesario restablecer los encabezados para realizar una solicitud simple entre sitios : por defecto, AngularJS 1.0.6 establece el encabezado X-Requested-With: XMLHttpRequest , forzando una solicitud preflighted , es decir, el navegador envía una solicitud http OPTIONS antes del GET . Esto podría no ser compatible con el servidor (como en este ejemplo, donde el servidor devuelve un 403 HTTP method not allowed ).
Sin embargo, este encabezado se eliminó hace seis meses (es decir, desde AngularJS 1.1.1 ) y el restablecimiento ya no es necesario (gracias por el camino a esta respuesta, AngularJS realiza una solicitud HTTP de OPCIONES para un recurso de origen cruzado ) .

Afortunadamente, Vojta Jina ya implementó esta función en la twig 1.1 . El siguiente código ( verlo en un plunker ) obtiene los datos binarios en un ArrayBuffer . Tenga en cuenta el uso de AngularJS 1.1.5 (como para hoy) aún inestable:

    Using $http.get to read binary data   

Using $http.get to read binary data


{{info}}

Nota 1 y nota 2: ver notas en la pregunta original.