2016-03-02 87 views
0

我需要下載大量文件,形成一次幾個網站,我有這樣的代碼下載多個圖像

var http = require('http'); 
var fs = require('fs'); 

var arr = ['http://www.bonyfarma.com/images/Bony%20Air.jpg', 'http://www.bonyfarma.com/images/Bony%20A-Booster.jpg']; 

for (var i = arr.length - 1; i >= 0; i--) { 
    var file = fs.createWriteStream(arr[i].split('/').pop(-1).toLowerCase().replace("%20", "-")); 
    var request = http.get(arr[i], function(response) { 
     response.pipe(file); 
    }); 
}; 

但如當我運行這個代碼時,第一個文件是空的,只有第二個文件被下載。你能幫我解決這個問題嗎?

回答

0
var http = require('http'); 
var fs = require('fs'); 

var arr = ['http://www.bonyfarma.com/images/Bony%20Air.jpg', 'http://www.bonyfarma.com/images/Bony%20A-Booster.jpg']; 

for (var i = arr.length - 1; i >= 0; i--) { 
    (function(url){ 
     var file = fs.createWriteStream(url.split('/').pop(-1).toLowerCase().replace("%20", "-")); 
     http.get(url, function(response) { 
      response.pipe(file); 
     }); 
    })(arr[i]); 
}; 
0

這樣做的原因是,你的file變量獲取的該for循環外懸掛。這將導致所有響應管道到最後創建的流。

修復,這是通過適當地確定範圍使用簡單 Array.prototype.forEach了var

最簡單的方式(節點支持):

arr.forEach(function(url) { 
    var file = fs.createWriteStream(url.split('/').pop(-1).toLowerCase().replace("%20", "-")); 
    var request = http.get(url, function(response) { 
     response.pipe(file); 
    }); 
});