Comment recevoir blob réponses à l'aide Angulaire 2+ @angulaire/http module?
Je suis en train de fournir un fichier pdf à télécharger à partir angulaire à 2 app...
ce code fonctionne:
var reportPost = 'variable=lsdkjf';
var xhr = new XMLHttpRequest();
xhr.open("POST", "http://localhost/a2/pdf.php", true);
xhr.responseType = 'blob';
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.onreadystatechange = function() {//Call a function when the state changes.
if(xhr.readyState == 4 && xhr.status == 200) {
var blob = new Blob([this.response], {type: 'application/pdf'});
saveAs(blob, "Report.pdf");
}
}
xhr.send(reportPost);
mais j'aurais bien aimé utiliser angulaire 2 Http intégré dans le client.
un peu de recherche:
- angulaire docs non écrite au moment de la publication:
https://angular.io/docs/js/latest/api/http/ResponseTypes-enum.html - ne sais pas si cela s'applique, mais le rxjs responseType paramètre semble
pour inclure uniquement le texte et json:
https://github.com/Reactive-Extensions/RxJS-DOM/blob/master/doc/operators/ajax.md
et des tests de code:
var headers = new Headers();
headers.append('Content-Type', 'application/x-www-form-urlencoded');
this.http.post('http://localhost/a2/pdf.php', reportPost, {
headers: headers
})
.retry(3)
//.map( (res:any) => res.blob() ) //errors out
.subscribe(
(dataReceived:any) => {
var blob = new Blob([dataReceived._body], {type: 'application/pdf'});
saveAs(blob, "Report.pdf");
},
(err:any) => this.logError(err),
() => console.log('Complete')
);
ps. le saveAs fonction vient d'ici: https://github.com/eligrey/FileSaver.js
- Semble que le blob()-méthode n'est pas encore mis en œuvre. Voir github.com/angular/angular/blob/master/modules/angular2/src/.... Un problème de suivi de l'état de mise en œuvre peut être trouvé ici: github.com/angular/angular/issues/2803
- Comment avez-vous "enregistrer sous" au travail? J'ai installé le module, installé le typings, et toujours avoir "pas une telle fonction: saveAs" quand je le lance.. tellement ennuyeux... comment voulez-vous inclure dans le fichier d'enregistrement de code? (j'utilise webpack, je n'ai toujours pas compris)
- j'ai juste été en ignorant l'erreur de la TS compilateur. - il encore de la compile... bâclée hein?
Vous devez vous connecter pour publier un commentaire.
Avec la sortie de Angular2 final on peut par exemple définir un service:
Ce service vous permettra d'obtenir un fichier et ensuite de le servir à un utilisateur.
Exemple de fichier zip: Comment utiliser JAX-RS et d'angle 2+ à télécharger un fichier zip
[ts] Property 'blob' does not exist on type 'Blob'.
quelqu'un sait pourquoi?Avec
@4.3, @5
et HttpClientModule, j'ai fini par faire:Voir ici: https://stackoverflow.com/a/45666313/4420532