我正在编写node.js
服务器,我在多部分请求中接受文件和CRC32校验和。我正在使用busboy
和crc
节点模块来处理节点中的多部分请求和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
上打开读取流并读出字节,则会读取图像,因此该文件已存在。
知道问题可能是什么?
答案 0 :(得分:1)
我唯一能想到的是,当你执行readFileSync()
时写入没有完成。你可以在阅读之前检查文件是否存在吗?
我也想知道它是否实际上不是duplicate of this。