鸿蒙arkts 分片获取MD5值
原使用taskpool处理分片对md5的异步处理,但一次系统更新后方法无法使用了;故有此次修改大文件获取MD5值耗时过长应用会卡退,所以块获取MD5值对最终获取到的相同MD5值所用的时间会相对较短;
·
原使用taskpool处理分片对md5的异步处理,但一次系统更新后方法无法使用了;故有此次修改大文件获取MD5值耗时过长应用会卡退,所以块获取MD5值对最终获取到的相同MD5值所用的时间会相对较短;使用方法如下
原先方法(js cryptojs):
@Concurrent
function getMd5Hash(chunk:ArrayBuffer){
// let wordArray: ESObject = CryptoJS.lib.WordArray.create(item);
// return wordArray
}
// getFileMD5(): string {
// const md5Hash: ESObject = CryptoJS.algo.MD5.create()
// const startTime = new Date().getTime()
// const chunks = this.getChunks()
// let md5: string = ''
// if (!chunks) {
// const wordArray: ESObject = CryptoJS.lib.WordArray.create(this.buf.buffer);
// md5 = CryptoJS.MD5(wordArray).toString();
// } else {
// chunks.forEach(chunk => {
// taskpool.execute(getMd5Hash, chunk).then(res=>{
// md5Hash.update(res)
// })
// })
// md5 = md5Hash.finalize().toString(CryptoJS.enc.Hex)
// }
// logUtil.info([`花费${new Date().getTime() - startTime}ms, 生成文件MD5值`])
// return md5
// }
新方法:(鸿蒙api)
async getFileMD5() {
try {
const startTime = new Date().getTime()
const chunks = this.getChunks()
if (!chunks || chunks.length === 0) {
let md = cryptoFramework.createMd('MD5');
md.updateSync({data:new Uint8Array(this.buf.buffer)})
let mdOutput = await md.digest();
console.info("md result: " + mdOutput.data)
return buffer.from(mdOutput.data).toString('hex')
logUtil.info([`花费${new Date().getTime() - startTime}ms, 生成文件MD5值`])
} else {
console.log('切片获取MD5')
let md = cryptoFramework.createMd('MD5');
for (let i=0 ; i<chunks.length ;i++){
let updateMessageBlob: cryptoFramework.DataBlob = { data: new Uint8Array(chunks[i]) };
await md.update(updateMessageBlob)
}
let mdOutput = await md.digest();
console.info("md result: " + mdOutput.data)
return buffer.from(mdOutput.data).toString('hex')
logUtil.info([`花费${new Date().getTime() - startTime}ms, 生成文件MD5值`])
}
}catch (err){
console.log('获取MD5报错了:',JSON.stringify(err))
throw (new Error('获取MD5报错了'))
}
}
更多推荐

所有评论(0)