2016-09-04 12 views
1

エクスプレスjsでファイルをダウンロードしようとしていますが、何か問題があります。
以下 は関数である。ノードエクスプレスでファイルをダウンロードするjs

var download = function(uri, filename, callback) { 
    request 
    .get(uri) 
    .on('response', function (response) { 
    var ext = response.headers['content-type'].split('/'); 
    filename += '.' + ext[1]; 
    }) 
    .pipe(fs.createWriteStream(filename)); 
}; 

問題は、私は、ファイルの拡張子を知らないということですので、私はレスポンスヘッダでそれを取得する必要がありますが、ext[1]値はで私のファイル名をインクリメントしませんファイル拡張子。私は、関数の外でそれを行うために、参照によって変数を設定することさえできません。

+0

あなたはここに http://stackoverflow.com/questions/7288814/download-a-file-from-nodejs-server-using-express – abdulbarik

+0

@abdulbarikからの助けを得ることができます - 彼は外部URLをダウンロードしたい、ではありませんダウンロード要求に答える。 – yeya

+0

'URI'は動的に表示されますか? – abdulbarik

答えて

0
  • あなたのパイプは、ファイル名がデータを取得する前に起動されると思います。
  • あなたは代わりにこれを試してみてください

'/' で分割しないでください。

var mime = require('mime-types'); // After npm install mime-types 

request 
    .get(uri) 
    .on('response', function (response) { 

     var responseType = (response.headers['content-type'] || '').split(';')[0].trim(); 
     var ext = mime.extension(responseType); 

     filename += '.' + ext; 

     var fileStream = fs.createWriteStream(filename) 
        .on('finish', function() { 
         //Download complete 
        }) 

     this.pipe(fileStream); 
    }) 

P.S.エクスプレスではなく「リクエスト」モジュールを使用してダウンロードしています。

+0

ねえよ!お返事をありがとうございます!さて、私は応答関数の外でファイル名を取得する必要があります、どのように私はこのファイル名を返すか、参照によって変数を設定できますか?再度、感謝します! –

+0

関数の外でファイル名を定義することはできますが、変更される時期は決してわかりません。 NodeJSはあなたが知っている限り非同期です。 – yeya

関連する問題