2013-10-08 20 views
5

Sto cercando di scaricare un numero di file da Flickr utilizzando le API di Flickr e le chiamate http.get() in un ciclo.Come scaricare file dall'URL in node.js

Ho la matrice di URL immagine e utilizzo la funzione 'download' per scaricare le immagini Se c'è un gran numero di immagini ci sono per lo più file vuoti. Ho trovato il codice di download qui.
Si prega di consigli su come affrontarlo.
Grazie in anticipo!

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. E infine c'è un errore: events.js: 72 throw er; // non gestita 'errore' evento ^ Errore: presa riagganciare a createHangUpError (http.js: 1442: 15) a Socket.socketOnEnd [come onend] (http.js: 1538: 23) a Socket.g (events.js: 175: 14) a Socket.EventEmitter.emit (events.js: 117: 20) a _stream_readable.js: 910: 16 a process._tickCallback (node.js: 415: 13)

+4

Consiglio vivamente di non farlo in modo sincrono, anche se sei in grado di capire come farlo. Consiglierei di creare una coda di file da scaricare e di eseguire quella coda mentre le immagini vengono scaricate una alla volta o quante ne vuoi alla volta. La limitazione è importante, come hai notato. – Brad

+1

Brad, grazie! Come inizio con quello? – user2013424

risposta

3

Vi raccomando di utilizzare il modulo asincrona per questo:

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

e decommentare cb(); nella funzione download

+1

forse 'eachLimit' sarebbe una scelta migliore piuttosto che provare a scaricare ** tutte ** le immagini simultaneamente? – WiredPrairie

+0

potrebbe essere, e potrebbe non esserlo) Lo cambio, grazie. –