node.js 中未计算 CRC32 校验和
CRC32 checksum is not getting calculated in node.js
我正在编写一个 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
上打开读取流并读出字节,图像正在读取,因此文件已经存在。
知道问题出在哪里吗?
我唯一能想到的是当你执行 readFileSync()
时写入还没有完成。你能在读取之前检查文件是否存在吗?
我也想知道它是否实际上不是 duplicate of this。
我正在编写一个 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
上打开读取流并读出字节,图像正在读取,因此文件已经存在。
知道问题出在哪里吗?
我唯一能想到的是当你执行 readFileSync()
时写入还没有完成。你能在读取之前检查文件是否存在吗?
我也想知道它是否实际上不是 duplicate of this。