Работаю над проектом, где я создаю некоторые 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...
Поскольку javascript является асинхронным, вы просто попросили, чтобы скрипт загружал 1 миллион JPG в одно и то же время. В идеале вы хотите, возможно, загрузить примерно 10 файлов одновременно. Точное число, которое вы можете проверить. Потому что слишком много, даже если бы это могло быть обработано, могло бы вызвать что-то, называемое обмолотом, что замедлит работу, а не ускорится. – Keith
Что может быть лучшим подходом, который вы предложили бы для этого? –
Просто держите подсчет активных соединений. Поэтому сначала вы можете начать 10 подключений, каждый раз, когда соединение будет завершено, запустите следующий. – Keith