node.js - nodejs中的哈希与终端中的哈希不同
问题描述
我想在 nodejs 中获取文件的 md5 哈希,但我得到的哈希与我可以直接从终端获取的哈希不同。
在nodejs中,我正在这样做(从这里)
var fd = fs.createReadStream('path/to/my/file');
var hash = crypto.createHash('md5');
hash.setEncoding('hex');
fd.on('end', function() {
hash.end();
console.log(hash.read()); // the desired sha1sum
});
fd.pipe(hash);
输出是d41d8cd98f00b204e9800998ecf8427e
在我的终端中,我这样做:
md5sum path/to/my/file
输出是f6ef86836065f2370ebd9b1caadce3b4
你知道为什么吗?
谢谢
编辑
这是我的代码:
//Download file
var firmware = fs.createWriteStream(desiredFirmwareProperties.fwName);
var r = https.get(desiredFirmwareProperties.fwURI, function(response) {
response.pipe(firmware);
});
//Checksum
var fd = fs.createReadStream(desiredFirmwareProperties.fwName);
var hash = crypto.createHash(desiredFirmwareProperties.fwChecksumAlgo);
hash.setEncoding('hex');
fd.on('end', function() {
hash.end();
console.log(desiredFirmwareProperties.fwChecksum);
console.log(hash.read());
});
fd.pipe(hash);
解决方案
我知道了,这是一个异步过程,你试图在下载完成之前读取文件
将校验和过程放在“关闭”事件中:
firmware.on('close', () => {
<checksum here>
})
推荐阅读
- javascript - discord.js v12 静音命令
- python - postgres 查询从基于月份和时间的日期\时间列过滤中提取数据
- java - Docker 容器 - 403 No valid crumb
- javascript - 自动完成查询上的未定义或空引用
- svn - SVN 坏文件 *.r52 *.v47
- flutter - 向地图添加图层/图块
- java - 无法访问创建的用户 INTO AD
- html - 导航在右侧时如何使徽标出现在左侧
- c++ - QT Creator 无法在 Windows 10 中使用 CMake 或 QMake
- multithreading - 使用 App-Script 从 Gmail 中的标签名称中使用 getThreads() 时,如何防止按主题或日期分组?