我正在编写一个node.js
服务器,我在其中接受一个文件以及多部分请求中的 CRC32 校验和。我正在使用busboy
和crc
节点模块来处理节点中的多部分请求和 CRC 操作。
在busboy
'finish
事件中,我正在尝试计算已保存文件的 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
并读出字节,则图像正在被读取,因此该文件已经存在。
知道问题可能是什么吗?