Sto cercando di fornire una scarica il pdf dall'interno di un angolare 2 app ...Come ricevere le risposte BLOB utilizzando il modulo Angular 2+ @ angular/http?
questo codice funziona:
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);
ma mi sarebbe piaciuto usare client HTTP integrato angolare 2 di.
una piccola ricerca:
- docs angolari non scritte al momento del distacco: https://angular.io/docs/js/latest/api/http/ResponseTypes-enum.html
- non so se questo si applica, ma il parametro rxjs responseType sembra per includere solo testo e JSON: https://github.com/Reactive-Extensions/RxJS-DOM/blob/master/doc/operators/ajax.md
e qualche codice di prova:
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')
);
grazie!
ps. la funzione saveAs viene da qui: https://github.com/eligrey/FileSaver.js
sembra il blob() - Metodo ISN 'ancora implementato. Vedere https://github.com/angular/angular/blob/master/modules/angular2/src/http/static_response.ts#L89. Un problema che tiene traccia dello stato di implementazione può essere trovato qui: https://github.com/angular/angular/issues/2803 – Larrifax
In che modo hai avuto "saveAs" per funzionare? Ho installato il modulo, installato le tipizzazioni, e ancora ottengo "nessuna funzione del genere: saveAs" quando lo eseguo .. mooolto fastidioso ... come lo includi nel codice dattiloscritto? (Io uso il webpack, non l'ho ancora capito) – Spock
Ho appena ignorato l'errore dal compilatore TS. compila ancora ... sciatto eh? – ryanrain