Node.js:查找截断的图像下载

时间:2019-05-04 22:05:27

标签: node.js

我已经在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);
            });
        });
    });
}

如何防止下载时图像被截断?

0 个答案:

没有答案