2016-08-07 4 views
0

私のパブリックディレクトリに保存されているpdfファイルをnode.jsアプリケーションにダウンロードしようとしています。私はpdfファイルをダウンロードする次のルートを持っています。しかし、私のファイルはGoogle Chromeからダウンロードしていないし、郵便配達員からもダウンロードできないという問題があります。コンソールにエラーはありません。コードは正しいのですが、私たちにはダウンロードできません。問題が何であるか教えてください。私は次のルートを持っています。私のexpress.jsアプリでファイルをダウンロードすることはできません

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

ファイルパスが有効であることを確認し、 'res.download(path)'を試してください。 –

+0

パスが正しいです。 –

答えて

0

私はres.download関数の後にルータでnext()コールバックを使用していました。問題は、私が '/' urlでリクエストするたびに、res.download()を処理せずに自分のリクエストがnext()になるということでした。 next()コールバックを削除するとコードが正常に動作しています

1

ルーターを使用する必要があります。

リスニング前の行の下に追加します。

app.use('/', CvRouter); 

UPDATE

をあなたはルートハンドラのようなミドルウェアを使用しています。ミドルウェアを使用するための

次のように使用する必要があります。

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

       next(); 
      }) 

しかし、あなたは要求を終了し、(ダウンロードして)応答を返送したいので、ルートハンドラのための右の構文は次のようである:

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

あなたの答えは間違いありません。実際それは私の質問のコードでタイプミスでした。 –

+0

@MuhammadAteekその次の部分を削除する必要があります。あなたはルートハンドラのようなミドルウェアを使います。 –

+0

@MuhammadAteek私の答えは間違っていたあなたの承認を取り戻す?? –

関連する問題