2016-09-04 46 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); 
    }) 

附:您正在使用「請求」模塊進行下載,而不是使用快遞。

+0

嘿yeya!感謝您的答覆!那麼,我需要獲取響應函數外的文件名,我如何返回這個文件名或通過引用設置一個變量?再次感謝! –

+0

你可以在函數外部定義文件名,但你永遠不會知道它何時被改變。如你所知,NodeJS是異步的。 – yeya