CRC32校验和未在node.js中计算

时间:2015-02-26 18:13:29

标签: javascript node.js crc32 busboy

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

busboy的{​​{1}}事件中,我正在尝试计算已保存文件的CRC32校验和,并根据收到的校验和进行验证。

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

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

finish

我的控制台始终打印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校验和,它可以正常工作并打印校验和。

图像也正确保存。在CRC32 of saved file: 0 file: files/image.jpg事件中,如果我在finish上打开读取流并读出字节,则会读取图像,因此该文件已存在。

知道问题可能是什么?

1 个答案:

答案 0 :(得分:1)

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

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