我总共有25000
个图片链接。我正在尝试使用nodejs request
软件包将这些图像下载到本地。
直到14000
到15000
都在下载,之后我遇到了以下错误。
错误
{ Error: socket hang up
at TLSSocket.onHangUp (_tls_wrap.js:1148:19)
at Object.onceWrapper (events.js:313:30)
at emitNone (events.js:111:20)
at TLSSocket.emit (events.js:208:7)
at endReadableNT (_stream_readable.js:1064:12)
at _combinedTickCallback (internal/process/next_tick.js:139:11)
at process._tickCallback (internal/process/next_tick.js:181:9)
code: 'ECONNRESET',
path: null,
host: 'factory.jcrew.com',
port: 443,
localAddress: undefined }
internal/streams/legacy.js:59
throw er; // Unhandled stream error in pipe.
^
Error: EMFILE: too many open files, open 'C:\sangram\fiverr\New folder\public\JCREWFCT\99105154564.png'
下载代码
var request = require('request');
var download = async function (uri, filename, callback) {
await request.head(uri, function (err, res, body) {
request(uri).pipe(fs.createWriteStream(filename)).on('close', callback);
if(err) {
console.log(filename);
console.log(err);
}
});
};
await download(d.image_link_1, saveDir, function () {
});
有人可以指导我一次下载这些可能的文件吗?
答案 0 :(得分:0)
我看到的主要问题是存在一个EMFILE
错误,应通过排队open
和readdir
调用来适当处理。为此使用graceful-fs
。
您可能会遇到如此大量的异步请求的另一个问题与池化和允许maxSockets
有关。如果发生这种情况,请将池设置为false
或适当地设置maxSockets
参数。或者,您可以设置http.globalAgent.maxSockets
,而不是根据请求设置maxSockets,例如:
var https = require('https');
https.globalAgent.maxSockets = 30000;