我想在网站上删除一些图像,图像由
保存http://a.com/1.jpg
http://a.com/2.jpg
http://a.com/3.jpg
所以,我编写代码来做到这一点
我的代码是:
var request = require('request');
var fs = require('fs');
var mkdir = require('mkdirp');
var preUrl = 'http://a.com/';
var dir = './images';
mkdir(dir, function(err) {
if(err) {
console.log(err);
}
});
for(var i = 1; i <= 10; i++){
var trueUrl = preUrl + i + '.jpg';
var name = i + '.jpg';
request(trueUrl, function(err, response, body) {
if(!err && response.statusCode == 200) {
download(trueUrl, dir, name);
console.log("Done" + trueUrl);
}
});
}
var download = function(url, dir, filename) {
request.head(url, function(err, res, body) {
request(url).pipe(fs.createWriteStream(dir + '/' + filename));
});
};
但代码中存在一些错误。
代码无法运行
request(trueUrl, function(err, response, body) {
if(!err && response.statusCode == 200) {
download(trueUrl, dir, name);
console.log("Done" + trueUrl);
}
});
那么,我该怎么办?
现在,我发现控制台将输出完成http://a.com/10.jpg。
最后,下载图片仅为10.jpg
答案 0 :(得分:1)
嘿,我编辑了你的代码,现在它的工作原理我写的是图片的trueUrl 您可以在使用异步请求时将此行用于for循环
var request = require('request');
var fs = require('fs');
var mkdir = require('mkdirp');
var preUrl = 'http://a.com/';
var dir = './images';
mkdir(dir, function(err) {
if(err) {
console.log(err);
}
});
var n = 10, i = 0;
function downloadImage() {
var trueUrl = preUrl + i + '.jpg';
var name = i + '.jpg';
trueUrl = "http://static.guim.co.uk/sys-images/Guardian/Pix/pictures/2014/4/11/1397210130748/Spring-Lamb.-Image-shot-2-011.jpg"
request(trueUrl, function(err, response, body) {
if(!err && response.statusCode == 200) {
download(trueUrl, dir, name);
}
i++;
if(i >= 10) {
return;
} else {
downloadImage();
}
});
console.log('i=' + i)
}
var download = function(url, dir, filename) {
request.head(url, function(err, res, body) {
request(url).pipe(fs.createWriteStream(dir + '/' + filename));
});
};
downloadImage();
答案 1 :(得分:0)
加入url元素时使用url.resolve
以防止出现此类错误。 (https://nodejs.org/api/url.html#url_url_resolve_from_to)
url.resolve('/one/two/three', 'four') // '/one/two/four'
url.resolve('http://example.com/', '/one') // 'http://example.com/one'
url.resolve('http://example.com/one', '/two') // 'http://example.com/two'
答案 2 :(得分:0)
我解决了这个问题!
使用request-promise,no request