我有一个全面的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 () {
});
有人能指点我一次下载这些文件需要做些什么吗?
发布于 2019-04-11 02:32:12
我看到的主要问题是存在一个EMFILE
错误,应该通过排队处理open
和readdir
调用来适当地处理这个错误。为此请使用graceful-fs
。
大量异步请求可能遇到的另一个问题与池和允许的maxSockets
有关。如果发生这种情况,请将池设置为false
或适当设置maxSockets
参数。或者,与其根据请求设置maxSockets,还可以设置http.globalAgent.maxSockets
,例如:
var https = require('https');
https.globalAgent.maxSockets = 30000;
https://stackoverflow.com/questions/55630101
复制相似问题