2013-10-08 6 views
5

Flickr API를 사용하여 Flickr에서 여러 파일을 다운로드하고 루프에서 http.get()을 호출하려고합니다.node.js의 URL에서 파일을 동기식으로 다운로드하는 방법

이미지의 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. 그리고 마지막으로 오류가 있습니다 : events.js : 72 throw er; // 처리되지 않은 '오류'이벤트는 ^ 오류 : Socket.socketOnEnd에서 [로 잠시 멈출] (http.js : 1538 : 23) Socket.g에서 소켓 (: 1442 15 http.js) createHangUpError에서 을 끊지 (events.js : 14 : 175) Socket.EventEmitter.emit 에서 910 : 16 process._tickCallback에서 (Node.js를 415 : 13)

_stream_readable.js에서 (events.js : 20 : 117)
+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

이 될 수도 있고 아닐 수도 있습니다). –

관련 문제