gpt4 book ai didi

node.js - Nodejs下载多个文件

转载 作者:搜寻专家 更新时间:2023-10-31 22:50:10 32 4
gpt4 key购买 nike

我需要下载约 26k 张图片。图像列表和 url 存储在 csv 文件中。我正在读取 csv 文件并尝试在循环浏览列表时下载图像。

如果我使用小集 ~1-2k 它工作正常但是当我切换到完整集时我收到 EMFILE 错误。

Error: EMFILE, open 'S:\images_download\Images\189900008.jpg'

我注意到 Node 试图一次创建所有文件,这可能是问题所在,但我无法强制它一个一个创建。我的理解是下面的代码应该像这样工作,但显然不是。

(顺便提一句,这段代码是在Windows上执行的)

代码:

var csv     = require("fast-csv");
var fs = require('fs');
var request = require('request');
var async = require('async');

fs.writeFile('errors.txt', '', function(){})

var downloaded = 0;
var totalImages = 0;
var files = [];

csv
.fromPath("Device_Images_List.csv")
.on("data", function(data){
files.push({device: data[0], url: data[1]})
})
.on("end", function(){
totalImages = files.length;

async.each(files, function(file, callback) {
var deviceId = file.device;
var deviceUrl = file.url;

if ( deviceId != 'DEVICE_TYPE_KEY' ) {
try {
writeStream = fs.createWriteStream('./Images/' + deviceId + '.jpg');
proxiedRequest = request.defaults({proxy: "http://proxy:8080"});
proxiedRequest(deviceUrl).pipe(writeStream);
writeStream.on('open', function(fd) {

var rem = proxiedRequest.get(deviceUrl);

rem.on('data', function(chunk) {
writeStream.write(chunk);
});
rem.on('end', function() {
downloaded++;
console.log('Downloaded: ' + deviceId + '; ' + (downloaded + 1) + ' of ' + totalImages);
writeStream.end();
});

});

writeStream.on('close', function(){
callback();
});

} catch (ex) {
fs.appendFile('errors.txt', deviceId + ' failed to download', function (err) {
callback();
});
}
}
}, function(err){
if( err ) {
console.log(err);
} else {

}
});
});

最佳答案

正如@slebetman 评论的那样,这个问题可以通过使用 async.eachSeries 来解决。一个一个地处理文件或async.eachLimit限制并行 Node :

async.eachLimit(files, 5, function(file, callback) {
// ... Process 5 files at the same time
}, function(err){
});

关于node.js - Nodejs下载多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30587513/

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