2017-10-29 9 views
0

Ich benutze express.js mit pdfkit, versuche, ein pdf zu erzeugen und einen Download in einem Webbrowser zu erzwingen.Kann den pdf Download nicht mit express.js erzwingen

Ich definierte statischen Speicherort, wo die PDF gespeichert wird, aber wenn ich diesen Speicherort lesen und die Datei herunterladen möchte passiert nichts. Ich habe auch versucht, Header zu setzen, aber das hat nicht funktioniert.

Ich habe gelesen, dass das etwas mit den Ports zu tun haben kann, auf denen Server und Front-End läuft. In meinem Fall sind dies: 4200 (Winkel) und 8080 (Node.js)

Hier Fragment des Server-Code ist:

var downl = doc.pipe(fs.createWriteStream('C:/Users/Martyna/Desktop/test pdfow/out.pdf')); 

doc.end(); 

downl.on('finish', function() { 
    res.download('C:/Users/Martyna/Desktop/test pdfow/out.pdf', 'out.pdf'); 
}) 
+0

Wie machen Sie die Anforderung von dem Client? Was sehen Sie im Bereich "Netzwerk" der Dev Tools Ihres Browsers? Sehen Sie die Anfrage und sehen Sie eine Antwort? – skirtle

+0

createAuthHeaders() { this.loadToken(); this.options = new RequestOptions ({ Header: neue Header ({ 'Content-Type': 'application/json', 'Genehmigung': this.authToken }) }); } loadToken() { this.authToken = localStorage.getItem ('Token'); } testGetId (cv: Cv) { this.createAuthHeaders(); return this.http.get (this.domain + '/ konto-uzykownika /' + cv.cvId, this.options); } – tys

+0

Und in meinem Entwickler-Tools bekomme ich die richtige Antwort Typ: "application/pdf" obwohl ich es in Server-Antwort nicht bin Einstellung – tys

Antwort

0

Sie müssen die folgenden Header auf Ihre Antwort hinzuzufügen. Haben die nicht heruntergeladene Datei

angesehen
Content-Type: application/pdf 
Content-Disposition: attachment; filename="You_File_Name.pdf" 

Um an den Browser anzuzeigen, dass die Datei sollte im Browser eingesehen werden:

Content-Type: application/pdf 
Content-Disposition: inline; filename="You_File_Name.pdf" 
+0

ich hinzugefügt haben: \t \t \t \t \t \t \t \t \t res.writeHead (200, { \t \t \t \t \t \t \t 'Content-Type': 'application/pdf', \t \t \t \t \t \t \t "Content-Disposition": Anhang; filename = out.pdf ' \t \t \t \t \t \t \t}); Und ich erhalte einen Fehler in meiner Konsole: Fehler: Kann Header nicht nach dem Senden festgelegt werden. – tys

+0

Sie machen es falsch - res.set ('Content-Type', 'application/pdf'); res.set ('Content-Type', 'Anhang; Dateiname = "You_File_Name.pdf"'); res.sendFile (__ Verzeichnisname, 'files/out.pdf'); –

+0

Verstanden! Das Einstellen von Inhaltstyp und Content-Disposition, wie du gesagt hast, hat wirklich geholfen, danke!Auch habe ich responseType auf Client-Site zu Blob angegeben und dann in http get-Methode schrieb ich das: testGetId (cv: Cv) { this.createAuthHeaders2(); return this.http.get (this.domain + '/ konto-uzykownika /' + cv.cvId, this.options) .subscribe (res => { console.log (res) var blob = neuer Blob ([ res.blob()], {type: 'application/pdf'}); saveAs (Blob, "cv.pdf"); }); } – tys