gpt4 book ai didi

node.js - 使用NodeJS和async.queue下载大量图像并将其保存到本地磁盘

转载 作者:太空宇宙 更新时间:2023-11-03 23:36:50 25 4
gpt4 key购买 nike

好吧,我有一个 NodeJS 应用程序,我正在尝试从 Web 服务器下载大量图像(目前大约 500 个,但数量会增加)。我遇到的问题是“管道中未处理的流错误错误:EMFILE”,因为似乎同时打开了太多文件。

所以我尝试使用 async.queue 批量处理 20 个文件。但我仍然收到错误。

SomeModel.find({}, function(err, photos){
if (err) {
console.log(err);
}
else {

photos.forEach(function(photo){

var url = photo.PhotoURL;
var image = url.replace('http://someurl.com/media.ashx?id=', '').replace('&otherstuffattheend', '.jpg');
photo.target = image;

var q = async.queue(function (task) {
request
.get(task.PhotoURL)
.on('response', function(response) {
console.log(task.PhotoURL + ' : ' + response.statusCode, response.headers['content-type']);
console.log(task.target);
})
.on('error', function(err) {
console.log(err);
})
.pipe(fs.createWriteStream(task.target));
}, 20);

q.push(photo, function(err) {
if (err) {
console.log(err);
}
});

q.drain = function() {
console.log('Done.')
}

});
}
});

我做错了什么?非常感谢您的时间和帮助。

最佳答案

问题在于您正在为每张照片创建一个新队列,并且每个队列仅接收一张照片。相反,只需创建一次队列(在 forEach() 之外)并将照片对象推送到其中。您还缺少任务处理程序中的回调。例如:

var q = async.queue(function(task, cb) {
request
.get(task.PhotoURL)
.on('response', function(response) {
console.log(task.PhotoURL + ' : ' + response.statusCode, response.headers['content-type']);
console.log(task.target);
// the call to `cb` could instead be made on the file stream's `finish` event
// if you want to wait until it all gets flushed to disk before consuming the
// next task in the queue
cb();
})
.on('error', function(err) {
console.log(err);
cb(err);
})
.pipe(fs.createWriteStream(task.target));
}, 20);

q.drain = function() {
console.log('Done.')
};

photos.forEach(function(photo) {
var url = photo.PhotoURL;
var image = url.replace('http://someurl.com/media.ashx?id=', '').replace('&otherstuffattheend', '.jpg');
photo.target = image;

q.push(photo, function(err) {
if (err) {
console.log(err);
}
});
});

关于node.js - 使用NodeJS和async.queue下载大量图像并将其保存到本地磁盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31236352/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com