Angular 2 PDF von der API herunterladen und in der Ansicht anzeigen
Ich Lerne Winkel-2 Beta. Ich Frage mich, wie download der PDF-Datei von der API und zeigt Sie in meine anzeigen? Ich habe versucht, eine Anfrage über das folgende:
var headers = new Headers();
headers.append('Accept', 'application/pdf');
var options = new ResponseOptions({
headers: headers
});
var response = new Response(options);
this.http.get(this.setUrl(endpoint), response).map(res => res.arrayBuffer()).subscribe(r=>{
console.log(r);
})
- Bitte beachten Sie, dass ich nur die
console.log
um den Wertr
Aber ich bekomme immer folgende exception message:
"arrayBuffer ()" - Methode implementiert nicht auf Antwort Superklasse
Ist es da, die Methode ist noch nicht so weit im Winkel 2 Beta? Oder gibt es irgendwelche Fehler, die ich gemacht habe?
Jede Hilfe würde geschätzt werden. Ich danke Ihnen sehr.
InformationsquelleAutor der Frage asubanovsky | 2016-02-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
In der Tat, dieses feature ist noch nicht implementiert in der HTTP-Unterstützung.
Als eine Problemumgehung, die Sie brauchen, um erweitern die
BrowserXhr
Klasse von Angular2, wie unten beschrieben, um dieresponseType
zublob
auf die zugrunde liegenden xhr-Objekt:Dann müssen Sie wickeln Sie die response-payload in ein
Blob
Objekt und verwenden Sie die FileSaver - Bibliothek zum öffnen der download-dialog:Den FileSaver Bibliothek muss eingebunden werden in die HTML-Datei:
Sehen diese plunkr: http://plnkr.co/edit/tfpS9k2YOO1bMgXBky5Y?p=preview
Leider wird die
responseType
für alle AJAX-Anfragen. Um in der Lage sein, den Wert dieser Eigenschaft, gibt es weitere updates zu tun, in derXHRConnection
undHttp
Klassen.Als Referenzen finden Sie unter diesen links:
Bearbeiten
Wenn man ein wenig mehr, ich denke, dass Sie nutzen könnten hierarchische Injektoren und konfigurieren Sie diesen Anbieter nur auf der Ebene der Komponente, die ausgeführt wird, der download:
Diese überschreiben würde, gilt nur für diese Komponente (vergessen Sie nicht, entfernen Sie die entsprechenden stellen bei der bootstrapping-Anwendung). Die download-Komponente verwendet werden könnten, wie:
InformationsquelleAutor der Antwort Thierry Templier
So, hier ist, wie ich es geschafft es zum laufen zu bringen.
Meine situation: ich brauchte zum download eine PDF-Datei aus meinem API-Endpunkt, und speichern Sie das Ergebnis als PDF-Datei im browser.
Unterstützen Datei-speichern in allen Browsern, die ich verwendet, die FileSaver.js Modul.
Erstellte ich eine Komponente, welche die ID der Datei, die zum download als parameter.
Die Komponente , wird so aufgerufen:
Die Komponente selbst verwendet XHR zu Holen/speichern Sie die Datei mit der angegebenen Nummer in der keine parameter. Auf diese Weise können wir umgehen die Tatsache, dass die Angular2 http-Modul noch nicht unterstützt, binäre Ergebnis-Typen.
Und nun, ohne weitere ado, die Komponente-code:
Ich verwendet habe, Font Awesome für die Schriftarten in der Vorlage verwendet. Ich wollte die Komponente zur Anzeige wird ein download-button und einen spinner, während die pdf-Datei abgerufen werden.
Beachten Sie auch, könnte ich erfordern Holen fileSaver.js -Modul. Dies ist, denn ich bin mit WebPack, so kann ich verlangen/importieren wie ich will. Ihre syntax kann unterschiedlich sein, abhängig von Ihrem build-tool.
InformationsquelleAutor der Antwort Spock
Ich glaube nicht, dass alle diese hacks notwendig sind. Ich habe gerade einen kurzen test mit dem standard-http-service in angular 2.0, und es funktionierte wie erwartet.
InformationsquelleAutor der Antwort Indev
Hier ist die einfachste Möglichkeit zum herunterladen einer Datei von einer API, die ich war in der Lage zu kommen mit.
Rufen Sie die
downloadFile(api,fileName)
Methode, die von der Komponente zur Klasse.Bekommen FileSaver führen Sie die folgenden Befehle in Ihrem terminal
InformationsquelleAutor der Antwort Shekhar
Hallohier ist ein arbeiten Beispiel. Es ist auch geeignet für PDF!
application/octet-stream - general geben.
Controller:
Angular2:
Service-xhr:
Installieren-Datei-saver npm-Pakete "Datei-saver": "^1.3.3", "@types/Datei-saver": "0.0.0" und Verkäufers.ts-import, Datei-saver';
Komponente btn download.
Mit
InformationsquelleAutor der Antwort dev-siberia
Hier ist der code, der arbeitet für downloadign die API Antwort in IE und chrome/safari. Hier die response-variable ist die API-Antwort.
InformationsquelleAutor der Antwort Dilip Nannaware
Bekommen Filesaver arbeiten in den Winkel-5: Installieren
In der Komponente verwenden
import * as FileSaver from "file-saver";
und verwenden FileSaver.Standard und nicht FileSaver.SaveAs
InformationsquelleAutor der Antwort Thom Kiesewetter