为什么热更新脚本生成的MD5,不是文件的MD5
var abuf = new ArrayBuffer(3)
var vu8 = new Uint8Array(abuf)
vu8[0] = 0x41; vu8[1] = 0x42; vu8[2] = 0x43
alert(faultylabs.MD5(abuf) == “902FBDD2B1DF0C4F70B4A5D23525E932”)
试试这样可不可以,还有,生成的md5跟网上是否一样
var arrayData = new Uint8Array(data)
MD5._md5(arrayData);
脚本里面用的是 Nodejs 提供的 md5 生成,我验证过 mac 系统下没问题,难道是 windows 系统下的 node 有问题?
我的是mac
那就奇怪了,我这边生成出来都是一样的,我是直接跟命令行中 md5 filename 对比的
http://www.cnfree.org/tools/hash.php
和这个在线MD5获取的是一样的么?我C#用.net库获取的和这个网站上是一样的,和楼上提供的js代码获取的也是一样的,但是和你那个脚本生成的不一样
会不会是你的文件编码不是 utf-8?
我会强制用 utf-8 来读取文件内容,然后生成 md5,具体代码看这里
https://github.com/cocos-creator/tutorial-hot-update/blob/master/version_generator.js#L71
也有可能是由于我是读取文件内容来生成 md5 的,而不是直接用文件
反正你写的脚本获取的不是真正文件的MD5
var data = jsb.fileUtils.getDataFromFile(cc.url.raw(’/resources/circle_1.png’));
这个 data 在ccc里面怎么转化成 utf8 文本,
我验证了一下,确实只有一些小的文本文件生成的 md5 是正常的,大一些的文件或者图片文件都不一样。你可以把我的脚本中的 md5 计算方法改掉,我暂时还没办法确定原因和找到解决方法。
也许可以尝试这个 npm module
把 utf8 去掉就正常了,但是我的项目已经上架了
在送审好麻烦
md5 = crypto.createHash(‘md5’).update(fs.readFileSync(subpath)).digest(‘hex’);
改成这样,生成的就是对的了,不知道有没有别的问题
客户端的Md5值怎么计算,有没有Js版本计算Md5值的,还是需要js-binding
3.16 热更,为什么md5一样的文件也全部下载下来了
@panda 那个这个问题怎么办。是否热更新就做不了了。我把ccc里面的md5算法和node.js md5算法搞成一样的。大文件 比如图片或者MP3一定会不一致。所以问题不是出在md5上。问题可能出在ccc jsb.fileUtils.getDataFromFile 和 node.js fs.readFileSync 在读取大文件的时候 读出来的数据可能不一样。





