2016-08-07 12 views
0

ich versuche, pdf-Datei herunterladen, die in meinem öffentlichen Verzeichnis gespeichert ist, wenn node.js Anwendung. Ich habe folgende Route zum Download der PDF-Datei. aber problem ist, dass meine datei uns nicht von google chrome und auch vom postboten herunterlädt. Es gibt keinen Fehler in der Konsole. Der Code ist korrekt, aber die Datei kann nicht heruntergeladen werden. Also sag mir bitte, was das Problem ist. Ich habe folgende Route.Datei kann nicht in meiner express.js App herunterladen

const express = require('express'); 
const bodyParser= require('body-parser') 
var path = require('path') 

const app = express(); 
app.use('/', express.static(__dirname + '/public')); 
app.use(bodyParser.json()) 
app.use(bodyParser.urlencoded()) 
var CvRouter = express.Router(); 

    CvRouter.get('/', function(req, res,next){  
      var path=require('path'); 
      var file = "muhammadateek_cv.pdf"; 
      var path = path.resolve(".")+'/public/'+file; 
      console.log('PATH=', path) 
      res.setHeader('Content-disposition', 'attachment; filename=muhammadateek_cv.pdf'); 
      res.setHeader('Content-type', 'application/pdf'); 
      res.download(path); 
       next(); 
      }) 
app.use('/', CvRouter); 
app.listen(3000, function() { 
    console.log('listening on 3000') 
}) 
+0

prüfen arbeitet, wenn der Dateipfad gültig ist, und versuchen 'res.download (Pfad)' –

+0

Pfad korrekt ist .. ich es trösten. –

Antwort

0

Ich verwendete next() Callback im Router nach Res.Download-Funktion. Problem war, dass, wenn ich Anfrage auf '/' URL meine Anfrage gehe t next() ohne behandelt res.download(). wenn ich nächste remove() Rückruf meinen Code feinen

1

Sie müssen den Router verwenden.

hinzufügen unterhalb der Linie vor dem Hören:

app.use('/', CvRouter); 

UPDATE

Sie verwenden Middleware wie eine Route Handler.

Für Middleware verwenden, müssen Sie wie verwenden:

CvRouter.get(function(req, res,next){  

       next(); 
      }) 

Aber Sie wollen die Anfrage beenden und eine Antwort zurückschicken (per Download), so dass die richtige Syntax für die Routen Handler ist wie:

CvRouter.get('/', function(req, res){  
      var path=require('path'); 
      var file = "muhammadateek_cv.pdf"; 
      var path = path.resolve(".")+'/public/'+file; 
      console.log('PATH=', path) 
      res.setHeader('Content-disposition', 'attachment; filename=muhammadateek_cv.pdf'); 
      res.setHeader('Content-type', 'application/pdf'); 
      res.download(path); 
      }) 
+0

Ihre Antwort ist ohne Zweifel richtig. Tatsächlich war es ein Tippfehler in meinem Fragecode. –

+0

@MuhammadAteek Sie müssen den nächsten Teil entfernen. Sie verwenden Middleware wie einen Routen-Handler. –

+0

@MuhammadAteek Meine Antwort war falsch, Sie nehmen Ihre Zustimmung zurück? –

Verwandte Themen