【问题标题】:CRC32 checksum is not getting calculated in node.jsCRC32 校验和未在 node.js 中计算
【发布时间】:2015-04-29 06:17:45
【问题描述】:

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

busboyfinish 事件中,我试图计算已保存文件的 CRC32 校验和,并根据收到的校验和对其进行验证。

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

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

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 上打开读取流并读出字节,则图像正在被读取,因此文件已经存在。

知道可能是什么问题吗?

【问题讨论】:

  • 如果busboy将写入传递给fs流,它是否知道它何时完成写入?
  • 我不确定。我认为@tgo 是正确的。我将尝试同步写入文件并检查是否能解决问题

标签: javascript node.js crc32 busboy


【解决方案1】:

我唯一能想到的是,在您执行readFileSync() 时,写入还没有完成。读取前能否检查文件是否存在?

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

【讨论】:

  • 嗯.. 好点。让我尝试同步写入文件,看看是否会有所不同
  • 这正是正在发生的事情。我使用 multiparty 来解析 Multipart 请求,它将文件直接保存到 temp 中,然后才给我最终的回调。谢谢!
猜你喜欢
  • 2011-02-04
  • 1970-01-01
  • 2015-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多