node.js 中未计算 CRC32 校验和

CRC32 checksum is not getting calculated in node.js

我正在编写一个 node.js 服务器,我在其中接受一个文件以及一个多部分请求中的 CRC32 校验和。我正在使用 busboycrc 节点模块来处理节点中的多部分请求和 CRC 操作。

busboyfinish 事件中,我正在尝试计算已保存文件的 CRC32 校验和并根据收到的校验和对其进行验证。

我的问题是,在 finish 事件中,校验和始终计算为 0。如果我手动 运行 针对同一文件的 CRC32 校验和,校验和计算正确。

这是我用来处理带有 crc32 计算的多部分请求的代码片段:

var busboy = new Busboy({ headers : request.headers});
var saveTo;
var crc32;
busboy.on('file', function (fieldname, file, filename, encoding, mimetype) {
    saveTo = path.join('files', '/', filename);
    file.pipe(fs.createWriteStream(saveTo));
});

busboy.on('field', function(fieldname, val, fieldnameTruncated, valTruncated) {
    if(fieldname == 'checksum') {
        crc32 = val;
    }
});

busboy.on('finish', function() {
    var savedFileCrc32 = crc.crc32(fs.readFileSync(saveTo)).toString(16);
    console.log("CRC32 of saved file: " + savedFileCrc32 + " file: " + saveTo);
});
request.pipe(busboy);

我的控制台总是打印 CRC32 of saved file: 0 file: files/image.jpg

但是,如果我 运行 一个节点程序来计算刚刚创建的文件的 CRC32 校验和,它可以完美地工作并打印校验和。

图像也正在正确保存。在 finish 事件中,如果我在 saveTo 上打开读取流并读出字节,图像正在读取,因此文件已经存在。

知道问题出在哪里吗?

我唯一能想到的是当你执行 readFileSync() 时写入还没有完成。你能在读取之前检查文件是否存在吗?

我也想知道它是否实际上不是 duplicate of this