HarmonyOS 鸿蒙Next 文件切片,获取的MD5值都是一样的
HarmonyOS 鸿蒙Next 文件切片,获取的MD5值都是一样的 老师您好,我在使用鸿蒙api fs文件处理模块的时候,对大文件进行了切片,使用for循环获取每个切片的MD5信息的时候,发现每个切片的MD5都是一样的,这似乎不对,以下是我的for循环代码:
for (let i = 0; i < this.chunks.length; i++) {
// 控制暂停继续
if (this.isPaused) {
await this.pausePromise();
}
// 1、将文件拷贝到临时目录,i个切片
const copyFilePath = params.fileUrl + `${this.chunks[i].index}`
fs.copyFileSync(params.fileUrl, copyFilePath)
// 2、调整copy文件偏置指针位置。
let copy_file = fs.openSync(copyFilePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE)
const num = fs.lseek(copy_file.fd, this.chunks[i].start, fs.WhenceType.SEEK_CUR)
// 3、copy文件切片
await fs.truncateSync(copy_file.fd, fileUploadUrl.sliceSize);
// 4、每个分片设置reuqestParams
console.log(TAG,"copyFilePath",copyFilePath)
const md5file = await hash.hash(copyFilePath, "md5")
console.log(TAG, "md5file", md5file)
// 5、循环调用上传接口,成功就本地存储状态
const reqData = await this.httpRequest(copyFilePath, data, params, md5file.toLowerCase(), this.chunks[i].index)
console.log(TAG, "reqData", JSON.stringify(reqData))
if (reqData.responseCode == 200 && reqData.result) {
// 分片上传成功
chunksFileInfo.push({
index: this.chunks[i].index,
md5: md5file.toLowerCase()
})
// 上传成功后,回调上传进度
progressCallBack(this.chunks[i].index + 1, this.chunks.length)
// 将上传成功的分片信息储存到本地
pubPreference.putString(this.taskId, JSON.stringify(chunksFileInfo))
} else {
console.log(JSON.stringify(reqData))
}
// 判断是否上传完成
if (this.chunks.length == chunksFileInfo.length) {
fileComplet = true
break
}
}
for循环中,我循环复制源文件,使用fs.lseek更改指针位置,使用fs.truncateSync进行切片,得到的地址通过hash.hash(copyFilePath, "md5")
获取MD5值,但是获取的MD5值都是一样的;
麻烦帮忙看看
更多关于HarmonyOS 鸿蒙Next 文件切片,获取的MD5值都是一样的的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
truncate根据传入的第二个参数,保留对应size的数据。是从文件头部开始,所以获取的MD5值相同
更多关于HarmonyOS 鸿蒙Next 文件切片,获取的MD5值都是一样的的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
针对“HarmonyOS 鸿蒙Next 文件切片,获取的MD5值都是一样的”这一问题,以下是专业回答:
在HarmonyOS系统中,如果文件被切片后每个切片的MD5值都相同,这通常意味着这些切片在内容上高度一致,即它们包含了相同的字节序列。MD5作为一种哈希算法,其设计初衷是对不同内容的数据产生不同的哈希值(或称摘要)。因此,出现相同MD5值的情况往往指示了数据内容的一致性。
在文件切片场景下,如果所有切片的MD5值相同,可能的原因包括:
-
切片方式问题:如果切片是简单地将文件分割成固定大小的块,而这些块在文件中重复出现(例如,文件包含大量重复数据),则可能导致MD5值相同。
-
哈希计算错误:在切片或哈希计算过程中可能存在错误,导致所有切片被错误地计算为相同的MD5值。
-
特殊文件结构:某些特殊格式的文件(如压缩文件、镜像文件等)可能具有特定的结构,使得切片后的数据块在内容上相同。
建议检查切片逻辑和哈希计算过程,确保它们正确无误。如果问题依旧没法解决请联系官网客服,官网地址是https://www.itying.com/category-93-b0.html。