使用从CSV扫描URL的节点请求下载图像

请原谅,因为代码是混乱的。 我还在学习。 我需要使用CSV文件中的URL扫描下载图像。 然而,我有2000+的URL与相同的域名,我不认为服务器将让我拉动一切,因此我总是得到一些图像后的错误。 我需要解决的问题 –
1)如何确保图像完全下载,然后只有代码移动到下一个URL
2)如何编写更好的代码
你的帮助表示赞赏。 谢谢

var csv = require('fast-csv'); var Promise = require('bluebird'); var fs = require('fs'); var request = require('request'); var path = "test.csv"; var promiseCSV = Promise.method(function(path, options) { return new Promise(function(resolve, reject) { var records = []; csv .fromPath(path, options) .on('data', function(record) { records.push(record); }) .on('end', function() { resolve(records); console.log('done'); }); }); }); var download = function(uri, filename, callback){ request.head(uri, function(err, res, body){ request(uri).pipe(fs.createWriteStream(filename)).on('close', callback); }); }; promiseCSV(path).then(function (records) { for(i=0;i<records.length;i++) { download(records[i][0],'img/'+records[i][1], function(){ }); } }); 

这将一次压缩您的请求到一个。 另一个select是使用限制请求来限制每单位时间的请求。

 var i = 0; promiseCSV(path).then(function (records) { next(); function next(){ download(records[i][0],'img/'+records[i][1], function(){ i++; if (i < records.length) next(); }); } }); 

另外,您的loggingvariables超出范围,您需要将其移出才能访问它:

 var records = []; // move out to global scope to access from elsewhere var promiseCSV = Promise.method(function(path, options) { return new Promise(function(resolve, reject) { csv .fromPath(path, options) .on('data', function(record) { records.push(record); }) .on('end', function() { resolve(records); console.log('done'); }); }); });