HarmonyOS 鸿蒙Next 文件切片,获取的MD5值都是一样的

发布于 1周前 作者 eggper 来自 鸿蒙OS

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

2 回复

truncate根据传入的第二个参数,保留对应size的数据。是从文件头部开始,所以获取的MD5值相同

更多关于HarmonyOS 鸿蒙Next 文件切片,获取的MD5值都是一样的的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


针对“HarmonyOS 鸿蒙Next 文件切片,获取的MD5值都是一样的”这一问题,以下是专业回答:

在HarmonyOS系统中,如果文件被切片后每个切片的MD5值都相同,这通常意味着这些切片在内容上高度一致,即它们包含了相同的字节序列。MD5作为一种哈希算法,其设计初衷是对不同内容的数据产生不同的哈希值(或称摘要)。因此,出现相同MD5值的情况往往指示了数据内容的一致性。

在文件切片场景下,如果所有切片的MD5值相同,可能的原因包括:

  1. 切片方式问题:如果切片是简单地将文件分割成固定大小的块,而这些块在文件中重复出现(例如,文件包含大量重复数据),则可能导致MD5值相同。

  2. 哈希计算错误:在切片或哈希计算过程中可能存在错误,导致所有切片被错误地计算为相同的MD5值。

  3. 特殊文件结构:某些特殊格式的文件(如压缩文件、镜像文件等)可能具有特定的结构,使得切片后的数据块在内容上相同。

建议检查切片逻辑和哈希计算过程,确保它们正确无误。如果问题依旧没法解决请联系官网客服,官网地址是https://www.itying.com/category-93-b0.html

回到顶部