我已经在node.js中创建了一个图像下载器。但是,我没有正确处理数据事件,这意味着某些图像被截断了(图像的其余部分填充为纯白色,黑色或灰色)。我需要以编程方式识别node.js中的截断图像,以便可以使用下载程序重新下载它们。
这里是link,代表在下载时被截断的图像及其完全下载的图像。
如何从大约700,000的文件夹中以编程方式识别此类图像?
这是我以前用来下载图像的脚本。我不确定如何正确处理数据事件以防止图像被截断。
const fs = require('fs-extra');
var progress = require('request-progress');
var probe = require('probe-image-size');
...
downloadImage(url, filename) {
return new Promise((resolve, reject) => {
var req = request(url);
if (!fs.existsSync(dirname)) fs.ensureDirSync(path.dirname(filename));
var image;
var bytes;
var type;
progress(req, { delay: 0 }).on('progress', function (state) {
reportDownloadSpeed(status.speed);
})
.on('response', response => {
if (response.statusCode == 200) {
type = mime.getExtension(response.headers['content-type']);
filename = filename + '.' + type;
image = fs.createWriteStream(filename);
bytes = response.headers['content-length'];
req.pipe(image);
} else {
reject(response.statusCode);
}
})
.on('error', function (error) {
reject(error);
})
.on('end', function () {
image.close();
var input = require('fs').createReadStream(filename);
// Get the width and height
probe(input).then(result => {
input.destroy();
if (result != null) {
resolve({
'bytes': bytes,
'width': result.width,
'height': result.height,
'type': type
});
} else {
reject('Not an image or corrupt');
}
}).catch((error) => {
reject(error);
});
});
});
}
如何防止下载时图像被截断?