2016-10-16 9 views
0

Работаю над проектом, где я создаю некоторые URL-адреса, а затем с этих URL-адресов получаю изображения.Загрузка миллиона изображений в nodejs

, например, у меня есть массив объектов, как urls

['abc.com/01.jpg', 
'abc.com/01.jpg', 
....... 
] 

и так далее URLS как это ..

То, что я пытаюсь сделать, это получить изображения из этих URL и пытается сохранить их через этот код

download = (uri, filename, callback) -> 
    request.head uri, (err, res, body) -> 
    # console.log 'content-type:', res.headers['content-type'] 
    # console.log 'content-length:', res.headers['content-length'] 
    request(uri).pipe(fs.createWriteStream(filename)).on 'close', callback 
    return 
    return 

Но он не работает должным образом. У любого органа есть некоторые хорошие идеи о downlaoding изображениях из url в проекте nodeJS?

Или может не сохранять их локально, а загружать их в Dropbox после получения от URL-адреса?

Я получил эту ошибку с кодом выше

 throw er; // Unhandled stream error in pipe. 
    ^

Error: EMFILE: too many open files, open 'C:\Users\Administrator\Desktop\graby\image.jpg' 
    at Error (native) 

[nodemon] app crashed - waiting for file changes before starting... 
+0

Поскольку javascript является асинхронным, вы просто попросили, чтобы скрипт загружал 1 миллион JPG в одно и то же время. В идеале вы хотите, возможно, загрузить примерно 10 файлов одновременно. Точное число, которое вы можете проверить. Потому что слишком много, даже если бы это могло быть обработано, могло бы вызвать что-то, называемое обмолотом, что замедлит работу, а не ускорится. – Keith

+0

Что может быть лучшим подходом, который вы предложили бы для этого? –

+0

Просто держите подсчет активных соединений. Поэтому сначала вы можете начать 10 подключений, каждый раз, когда соединение будет завершено, запустите следующий. – Keith

ответ

0

Вы пытаетесь открыть потоки (файлы) для всех этих файлов параллельно, но операционная система ограничивает потоки вашего приложения.

Вы можете либо попытаться загрузить файлы синхронно, либо один за другим, либо попытаться выполнить загрузку, поэтому всегда пытаетесь загрузить как 30 изображений параллельно.

+0

Как сделать один за другим, пожалуйста, дайте пример или любую ссылку –

+0

@JunaidFarooq Request не предлагает такую ​​функцию AFAIK, чтобы вы могли создать функцию отправки загрузки, если остались URL-адреса и вызвать эту функцию из обратного вызова загрузки. – idmean

 Смежные вопросы

  • Нет связанных вопросов^_^