2013-10-08 57 views
5

我試圖使用Flickr API和http.get()調用從循環中下載大量來自Flickr的文件。如何從node.js中的URL同步下載文件

我有圖像網址的數組,我使用「下載」功能下載圖片 如果有大量的圖像,大部分都是空文件。 我在這裏找到了下載代碼。
請教如何解決這個問題。
在此先感謝!

for (i=1;i<100;i++){ 

    filename= "./images/file"+i+".jpg"; 

    download(photourl[i], filename,{}); 


    } //End of for-loop 

..... 

var download = function(url, dest, cb) { 
    var file = fs.createWriteStream(dest); 
    var request = http.get(url, function(response) { 
    response.pipe(file); 
    file.on('finish', function() { 
     file.close(); 
     //cb(); 
    }); 
    }); 
} 

P.S.然後最後有錯誤: events.js:72 throw er; //未處理'錯誤'事件 ^ 錯誤:套接字在Socket.gocketOnEnd [as onend](http.js:1538:23) 處的create.gangUpError(http.js:1442:15) 處掛起(events.js:175:14) 在Socket.EventEmitter.emit(events.js:117:20) 在_stream_readable.js:910:16 在process._tickCallback(node.js中:415:13)

+4

我強烈建議不要同步這樣做,即使你能夠弄清楚如何做到這一點。我建議創建一個隊列的文件下載,並運行該隊列,因爲圖像是一次一個下載,或者一次下載多少。正如你所注意到的那樣,節流很重要。 – Brad

+1

布拉德,謝謝!我該如何開始? – user2013424

回答

3

我建議使用異步模塊此:

var i = 1, threads = 5; 
require('async').eachLimit(photourl, threads, function(url, next){ 
    download(url, "./images/file"+(i++)+".jpg", next); 
}, function(){ 
    console.log('finished'); 
}) 

並取消CB();在下載功能

+1

也許'eachLimit'會是一個更好的選擇,而不是試圖同時下載**所有**圖像。 – WiredPrairie

+0

可能是,也可能不是)我改變它,謝謝。 –