files文件分片上传+计算MD5值(sparkMD5),使用file.slice(start, end)方法

2023-05-16

因为要跟后端交互,上传前要拿到文件的已上传信息,所以要给后端传MD5码,这个需要先计算出文件的MD5码,用 spark-md5 插件来计算

一、计算出文件的MD5值

要配合js的 FileReader 函数来使用 SparkMD5

import SparkMD5 from 'spark-md5'

// 计算MD5
getMD5(file, fileListID) {
	// 使用sparkMD5的ArrayBuffer类,读取二进制文件
    const spark = new SparkMD5.ArrayBuffer()
    const fileReader = new FileReader()
    // 异步操作,读完后的结果
    fileReader.onload = (e) => {
    	// 把文件开始传入spark
        spark.append(e.target.result)
        // spark计算出MD5后的结果
        const _md5 = spark.end()
        console.log(_md5)
        // 下面可以写一些自己需要的业务代码, 例如 fileItem.fileMD5 = _md5
    }
    // fileReader读取二进制文件
    fileReader.readAsArrayBuffer(file)
},

二、把单个文件切分成小片上传

// 文件切片大小 2MB
chunkSize: 2097152,
// 文件总切片数
chunkTotal: Math.ceil(file.size / this.chunkSize),

// 分片上传 fileItem 是单个文件的对象信息,包含该file的分片大小等信息,可以通过后端查询结果赋值
// fileItem.currentChunk 是单个文件的当前要上传的分片序号,要上传第一片就是1
// fileItem.fileSize 是单个文件的总大小
// fileItem.fileMD5 是上面计算出来的MD5值
fragmentUpload(fileItem) {
    // 批量循环发送分片上传请求
    for (let i = fileItem.currentChunk; i <= fileItem.chunkTotal; i++) {
        let start = i === 1 ? 0 : (i - 1) * this.chunkSize
        let end = start + this.chunkSize >= fileItem.fileSize ? fileItem.fileSize : start + this.chunkSize
        console.log('start:', start)
        console.log('end:', end)
        const chunkFile = fileItem.file.slice(start, end)
        const _shardSize = end === fileItem.fileSize ? end - start : this.chunkSize
        let formObj = new FormData()
        // 这些都是调用你的后端接口需要的,不需要的可以删除
        formObj.append('file', chunkFile)
        formObj.append('name', fileItem.fileName)
        formObj.append('type', fileItem.type)
        formObj.append('hashCode', fileItem.fileMD5)
        formObj.append('size', fileItem.fileSize)
        formObj.append('shardIndex', _shardIndex.toString())
        formObj.append('shardSize', _shardSize)
        formObj.append('shardTotal', fileItem.chunkTotal)
        // 调用上传接口,发送后端需要的数据
        apiUploadFileByChunk(formObj).then((res) => {
            if (res.status === '0') {
                if (fileItem.currentChunk >= fileItem.chunkTotal) {
                    fileItem.progressNumber = 100
                    fileItem.status = '2'
                    this.countNumber++
                    this.startUpload()
                } else {
                    fileItem.currentChunk++
                    fileItem.progressNumber = Math.floor(fileItem.currentChunk / fileItem.chunkTotal * 100)
                }
            } else {
                fileItem.status = '3'
            }
        }).catch(() => {
            fileItem.status = '3'
        })
        _shardIndex++
    }
},
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

files文件分片上传+计算MD5值(sparkMD5),使用file.slice(start, end)方法 的相关文章

  • 区分大小写的文件系统上的 File.equals

    我有一个字符串形式的文件路径 在 Java 中 我需要确定文件系统上是否存在该文件 并且我们的代码需要跨平台 因为它在 Windows Linux 和 OS X 上运行 问题是文件路径和文件本身的大小写可能不匹配 即使它们确实代表相同的文件
  • 最好的“忘记密码”方法是什么? [复制]

    这个问题在这里已经有答案了 可能的重复 忘记密码 实现忘记密码功能的最佳方法是什么 https stackoverflow com questions 522967 forgot password what is the best meth
  • 如何有效地使用 python 中的空数据填充文件?

    我需要创建不包含数据的任意大小的文件 它们可能相当大 虽然我可以循环遍历并写入一个空字符 直到达到文件大小 但这看起来很难看 with open filename wb as f what goes here 执行此操作的有效 Python
  • SHA 足以检查文件重复吗? (PHP 中的 sha1_file)

    假设您想创建一个文件托管站点 供人们上传文件并向他们的朋友发送链接以供稍后检索 并且您想确保文件在我们存储文件的位置重复 那么 PHP 的 sha1 file 是否足以完成该任务 有什么理由不使用 md5 file 来代替吗 对于前端 它将
  • Golang:获取切片的类型

    我正在使用 Reflect 包来获取任意数组的类型 但是得到 prog go 17 cannot use sample array1 type int as type interface in function argument proce
  • 使用 OpenFileDialog 选择文件和文件夹

    我做了很多研究来找到这个问题的合适答案 但我失败了 我可以在这里和其他论坛上看到多个问题 但没有明确的答案带来明确的解决方案 我希望 OpenFileDialog 为我选择一个 多个文件 并允许我也选择文件夹 例如 A 多个文件或多个文件夹
  • android:检查应用程序中文件是否存在

    我的应用程序的资产文件夹中有几个 html 文件 我的应用程序根据设备语言加载这些文件 当我检查文件是否存在时 它说不存在 但是当我使用 browser loadUrl filename 加载该文件时 它加载得很好 以下代码将帮助您理解我的
  • Python 3:资源警告:未关闭的文件 <_io.TextIOWrapper name='PATH_OF_FILE'

    当我在 python 中运行测试用例时 python 规范化器 setup py 测试 我收到以下异常 ResourceWarning unclosed file lt io TextIOWrapper name Users workspa
  • Java-将文件复制到新文件或现有文件

    我想写一个函数副本 文件f1 文件f2 f1 始终是一个文件 f2 是文件或目录 如果 f2 是一个目录 我想将 f1 复制到该目录 文件名应保持不变 如果f2是一个文件 我想将f1的内容复制到文件f2的末尾 例如 如果 F2 具有内容 2
  • 如何使用 Retrofit 2 下载 pdf 文件

    我在下载带改造的 pdf 文件时遇到困难 我的代码生成了一个文件 但它的大小错误 并且当 pdf 打开时它是空白的 这就是我的 php web 服务返回 pdf 文件的方式 param Slim Slim app param String
  • 如何使用 .NET 压缩目录?

    我有一个包含多个文件的目录 我想将此文件夹压缩为 zip 或 tar gz 文件 我怎样才能用 C 完成他的工作 您可以使用DotNetZip 库 http www codeplex com DotNetZip 它有相当丰富和有用的功能 E
  • 用 C 将位写入文件

    我有这个字符串 101 我想用 C 语言将其写入文件 而不是文本 101 等 8 位 x 字符 但直接使用字符串作为位 位 1 位 0 和位 1 这样文件将是3位 有可能吗 我在网上搜索并尝试这样做 char c 25 101 FILE b
  • 如何在Java中读取文件的最后“n”个字节

    如何在不使用 RandomAccessFile 的情况下从文件中读取最后 n 个字节 我的文件中的最后 6 个字节包含写回文件时的重要信息 我需要写入原始文件 然后将最后 6 个字节附加到其他地方 有什么指导吗 谢谢 你必须使用随机存取文件
  • Python下载器

    所以我试图编写一个脚本来使用 python 下载图片文件 我使用谷歌找到了这个 def 但是我下载的每张图片都 损坏 了 有任何想法吗 def download url Copy the contents of a file from a
  • Linux下对多个文件进行排序

    我有多个 很多 文件 每个都非常大 file0 txt file1 txt file2 txt 我不想将它们合并到一个文件中 因为生成的文件将超过 10 场演出 每个文件中的每一行都包含一个 40 字节的字符串 现在字符串的排序相当好 大约
  • PHP md5() 给出与 MySQL md5 不同的输出

    我正在尝试设置登录系统 但无法解决一个问题 PHP 通过 md5 给了我另一个输出 比MySQL 例如 在 PHP 中 password md5 brickmasterj return password 返回 3aa7b18f304e2e2
  • Javascript 将 CSV 文件加载到数组中

    我正在 WordPress 中开发一个网页 该网页需要有一个包含所有县的组合框 我有一个 csv 格式的数据集 其中包含所有这些县的约 10k 行 当用户在下拉列表中选择一个县时 我只想在网页中显示所选县的数据 这是我的要求 在 WordP
  • Python列表切片效率

    在下面的代码中 def listSum alist Get sum of numbers in a list recursively sum 0 if len alist 1 return alist 0 else return alist
  • MD5 和 SHA1 的安全性如何

    嘿 只是一个简单的问题 因为我想更多地了解哈希函数 我知道它们如何工作以及它们做什么 但是它们的安全性如何 我希望得到一个简单的答案而不是链接 因为我从来没有发现它们有用 现在的技术 两者都可以cracked http www hackth
  • PHP 一次只能看到 20 个上传文件

    当我尝试一次上传超过 20 个文件时 网络服务器只能看到前 20 个文件 任何其他文件都会被忽略 问题是什么 简单的代码可以尝试

随机推荐