0

我正在编写一个node.js服务器,我在其中接受一个文件以及多部分请求中的 CRC32 校验和。我正在使用busboycrc节点模块来处理节点中的多部分请求和 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并读出字节,则图像正在被读取,因此该文件已经存在。

知道问题可能是什么吗?

4

1 回答 1

1

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

我也想知道它是否实际上不是this 的副本

于 2015-02-26T18:27:54.847 回答