que observables example ejemplo angular rxjs

observables - ¿Cómo recibir respuestas de blob usando el módulo 2+ @ angular/http de Angular?



que es un observable en angular (3)

Con @4.3, @5 y HttpClientModule , terminé haciendo:

this.http.post(`${environment.server}/my/download`, data, {responseType: ''blob'', observe: ''response''}) .map( res => ({content: res.body, fileName: res.headers.get(''content-filename'')}));

Estoy tratando de proporcionar una descarga de pdf desde una aplicación angular 2 ...

este código funciona:

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);

pero me hubiera gustado usar el cliente Http incorporado de angular 2.

un poco de investigación:

y algún código de prueba:

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'') );

PD. La función saveAs viene de aquí: https://github.com/eligrey/FileSaver.js


Con el lanzamiento de Angular2 final podemos definir, por ejemplo, un servicio:

@Injectable() export class AngularService { constructor(private http: Http) {} download(model: MyModel) { //get file from service this.http.post("http://localhost/a2/pdf.php", JSON.stringify(model), { method: RequestMethod.Post, responseType: ResponseContentType.Blob, headers: new Headers({''Content-Type'', ''application/x-www-form-urlencoded''}) }).subscribe( response => { // download file var blob = new Blob([response.blob()], {type: ''application/pdf''}); var filename = ''file.pdf''; saveAs(blob, filename); }, error => { console.error(`Error: ${error.message}`); } ); } }

Este servicio obtendrá el archivo y luego lo entregará a un usuario.

Ejemplo para archivo zip: cómo utilizar JAX-RS y Angular 2+ para descargar un archivo zip


Consulte aquí: https://.com/a/45666313/4420532

return this._http.get(''/api/images/'' + _id, {responseType: ''blob''}).map(blob => { var urlCreator = window.URL; return this._sanitizer.bypassSecurityTrustUrl(urlCreator.createObjectURL(blob)); })