Je vais avoir un vraiment difficile résoudre ce problème. J'ai essayé tellement de solutions différentes que je ne suis pas sûr de ce que je dois réparer maintenant. Je tente de récupérer un Blob via http get et de télécharger le fichier pour un utilisateur utilisant FileSaver.js Pour une raison quelconque, chaque fois que j'essaie d'ouvrir l'image, je reçois un message "endommagé, corrompu ou trop grand". J'ai essayé de jouer avec le 'responseType' (en changeant en 'blob'), en ajoutant un 'Accept' à l'en-tête. Rien ne semble fonctionner pour moi !! Est-ce que quelqu'un peut me pointer dans la bonne direction?Télécharger Blob via http en utilisant AngularJS et Angular-FileSaver.js
service
download: function(blobId, token) {
var req = {
method: 'GET',
cache: false,
url: 'api/Blob/DownloadBlob/' + blobId,
headers: {
'responseType': 'arraybuffer',
'Authorization': token
}
};
return $http(req)
.then(function (response) {
return response;
}, function(response) {
// something went wrong
return $q.reject(response.data);
});
}
Contrôleur
$scope.downloadFile = function() {
Data.download($scope.blobId, $scope.token).then(function (response) {
var blob = new Blob([response], { type: 'image/png' });
FileSaver.saveAs(blob, 'download.png');
});
};
'responseType' est ** pas ** un en-tête. Voir https://docs.angularjs.org/api/ng/service/$http#usage – Phil
FileSaver ne fonctionnera pas pour les navigateurs Safari ou iOS Safari. Je crois que cela devrait fonctionner dans Safari 10.1 sur Mac car cette version indique qu'il supporte l'attribut de téléchargement dans la balise d'ancrage (ce qui utilise les fichiers sous le capot) – Patrick