当前位置: 首页 > article >正文

前端使用 spark-md5 实现大文件切片上传

需要计算文件MD5和、分片MD5:

封装公共方法代码如下:

import SparkMD5 from "spark-md5"/*** 计算文件MD5* @param file* @returns*/
export function calculateFileMD5(file) {return new Promise((resolve) => {const reader = new FileReader();reader.onload = function (e) {const spark = new SparkMD5.ArrayBuffer();spark.append(e.target.result);resolve(spark.end());};reader.readAsArrayBuffer(file);})
}/*** 计算分片MD5* @param chunk 当前切切片* @returns*/
export function calculateChunkMD5(chunk) {return new Promise((resolve) => {const reader = new FileReader();reader.onload = function (e) {const spark = new SparkMD5.ArrayBuffer();spark.append(e.target.result);resolve(spark.end());};reader.readAsArrayBuffer(chunk);})
}

在上传页面调用:

<template><form id="uploadForm"><div class="fileBox"><span class="fileLabel">文件:&nbsp; </span><input type="file" id="file" name="file"></div><el-progress id="progressBar" :percentage="progress" style="width: 335px;"></el-progress><button type="submit">提交</button></form>
</template><script setup>
import { calculateFileMD5, calculateChunkMD5 } from './calculateMd5'
import { ElMessage, ElMessageBox } from 'element-plus'
import axios from 'axios'
import { getToken } from "@/utils/auth";
const emit = defineEmits(['send-upload'])
const uploadChunkUrl = ref(import.meta.env.VITE_APP_BASE_API + "/dbms/file/chunk"); //上传接口
const mergeUrl = ref(import.meta.env.VITE_APP_BASE_API + "/dbms/file/merge"); //合并接口const file = ref(null)
const progress = ref(0)async function uploadFile(file) {const chunkSize = 5 * 1024 * 1024; // 5MB每片const totalChunks = Math.ceil(file.size / chunkSize);const fileMd5 = await calculateFileMD5(file); // 计算整个文件的MD5for (let i = 0; i < totalChunks; i++) {const start = i * chunkSize;const end = Math.min(file.size, start + chunkSize);const chunk = file.slice(start, end);const chunkMd5 = await calculateChunkMD5(chunk); // 计算当前分片的MD5progress.value = Math.round((i / totalChunks) * 100) // 计算上传进度const formData = new FormData();formData.append('file', chunk);formData.append('chunkNumber', i + 1);formData.append('totalChunks', totalChunks);formData.append('fileMd5', fileMd5);formData.append('chunkMd5', chunkMd5);formData.append('fileName', file.name);await axios.post(uploadChunkUrl.value, formData, {headers: { 'Content-Type': 'multipart/form-data', 'Authorization': 'Bearer ' + getToken() }});}// 所有分片上传完成后,通知后端合并const res = await axios.post(mergeUrl.value, {fileMd5: fileMd5,fileName: file.name,totalChunks: totalChunks});// console.log(res)if (res.status == 200) {progress.value = 100ElMessage.success('文件上传成功!')// 上传成功 通知父组件关闭弹窗,清空下拉表单,更新列表数据emit('send-upload')}
}onMounted(async () => {/**触发上传**/document.getElementById("uploadForm").onsubmit = async function (event) {event.preventDefault();const fileInput = document.getElementById("file");file.value = fileInput.files[0];if (!file.value) {ElMessage.warning("请选择文件!")return;}uploadFile(file.value)}
})
</script>

相关文章:

前端使用 spark-md5 实现大文件切片上传

需要计算文件MD5和、分片MD5&#xff1a; 封装公共方法代码如下&#xff1a; import SparkMD5 from "spark-md5"/*** 计算文件MD5* param file* returns*/ export function calculateFileMD5(file) {return new Promise((resolve) > {const reader new FileRea…...

《操作系统真相还原》——进入内核

ELF 按书上的操作来&#xff0c;在现代操作平台编译链接默认生成elf64 格式的文件&#xff0c; 很显然程序头位置发生变化&#xff0c;因为定义elf 结构的类型中有64位&#xff0c;所以我们需要将编译链接出32位格式的 gcc -m32 -c -o main.o main.c ld -m elf_i386 main.o …...

【QQ音乐】sign签名| data参数 | AES-GCM加密 | webpack(上)

1.目标 网址&#xff1a;https://y.qq.com/n/ryqq/toplist/26 切换榜单出现请求&#xff0c;可以看到sign和data是加密的 2.逆向分析 搜索sign: 可以看到sign P(n.data)&#xff0c;而n.data就是请求的加密data参数 data {"comm":{"cv":4747474,&qu…...

【STM32】按键控制LED 光敏传感器控制蜂鸣器

&#x1f50e;【博主简介】&#x1f50e; &#x1f3c5;CSDN博客专家 &#x1f3c5;2021年博客之星物联网与嵌入式开发TOP5 &#x1f3c5;2022年博客之星物联网与嵌入式开发TOP4 &#x1f3c5;2021年2022年C站百大博主 &#x1f3c5;华为云开发…...

M-OFDM模糊函数原理及仿真

文章目录 前言一、M序列二、M-OFDM 信号1、OFDM 信号表达式2、模糊函数表达式 三、MATLAB 仿真1、MATLAB 核心源码2、仿真结果①、m-OFDM 模糊函数②、m-OFDM 距离分辨率③、m-OFDM 速度分辨率④、m-OFDM 等高线图 四、资源自取 前言 本文进行 M-OFDM 的原理讲解及仿真&#x…...

【MySQL】MVCC与Read View

目录 一、数据库并发的三种场景 二、读写场景的MVCC &#xff08;一&#xff09;表中的三个隐藏字段 &#xff08;二&#xff09;undo 日志 &#xff08;三&#xff09;模拟MVCC &#xff08;四&#xff09;Read View &#xff08;五&#xff09;当前读和快照读 三、RC和…...

相机--双目立体相机

教程 链接1 教程汇总 立体匹配算法基础概念 视频讲解摄像机标定和双目立体原理 两个镜头。 双目相机也叫立体相机--Stereo Camera&#xff0c;属于深度相机。 作用 1&#xff0c;获取图像特征&#xff1b; 2&#xff0c;获取图像深度信息&#xff1b; 原理 原理和标定 …...

多目标粒子群优化算法(MOPSO),用于解决无人机三维路径规划问题,Matlab代码实现

多目标粒子群优化算法&#xff08;MOPSO&#xff09;&#xff0c;用于解决无人机三维路径规划问题&#xff0c;Matlab代码实现 目录 多目标粒子群优化算法&#xff08;MOPSO&#xff09;&#xff0c;用于解决无人机三维路径规划问题&#xff0c;Matlab代码实现效果一览基本介绍…...

工厂模式 vs 策略模式:设计模式中的 “创建者” 与 “决策者”

在日常工作里&#xff0c;需求变动或者新增功能是再常见不过的事情了。而面对这种情况时&#xff0c;那些耦合度较高的代码就会给我们带来不少麻烦&#xff0c;因为在这样的代码基础上添加新需求往往困难重重。为了保证系统的稳定性&#xff0c;我们在添加新需求时&#xff0c;…...

23、Swift框架微调实战(3)-Qwen2.5-VL-7B LORA微调OCR数据集

一、模型介绍 Qwen2.5-VL 是阿里通义千问团队开源的视觉语言模型,具有3B、7B和72B三种不同规模,能够识别常见物体、分析图像中的文本、图表等元素,并具备作为视觉Agent的能力。 Qwen2.5-VL 具备作为视觉Agent的能力,可以推理并动态使用工具,初步操作电脑和手机。在视频处…...

37. Sudoku Solver

题目描述 37. Sudoku Solver 回溯 class Solution {vector<vector<bool>> row_used;vector<vector<bool>> col_used;vector<vector<bool>> box_used;public:void solveSudoku(vector<vector<char>>& board) {row_used.r…...

C# Renci.SshNet 登陆 suse配置一粒

C# 调用Renci.SshNet 的SSH类库&#xff0c;登陆 suse linux系统&#xff0c;如果没有配置&#xff0c;会报错&#xff1a; Renci.SshNet.Common.SshAuthenticationException: No suitable authentication method found to complete 1、需要root登陆os,配置 /etc/ssh/sshd_con…...

RV1126-OPENCV 图像叠加

一.功能介绍 图像叠加&#xff1a;就是在一张图片上放上自己想要的图片&#xff0c;如LOGO&#xff0c;时间等。有点像之前提到的OSD原理一样。例如&#xff1a;下图一张图片&#xff0c;在左上角增加其他图片。 二.OPENCV中图像叠加常用的API 1. copyTo方法进行图像叠加 原理…...

修改 vscode 左侧导航栏的文字大小 (更新版)

1. 起因&#xff0c; 目的: 问题&#xff1a; vscode 左侧的文字太小了&#xff01;&#xff01;&#xff01;我最火的一篇文章&#xff0c;写的就是这个问题。 看来这个问题&#xff0c;是很广泛的一个痛点。我最近更新了 vscode&#xff0c; 这个问题又出现了。再来搞一下。…...

从C++编程入手设计模式2——工厂模式

从C编程入手设计模式 工厂模式 ​ 我们马上就要迎来我们的第二个创建型设计模式&#xff1a;工厂方法模式&#xff08;Factory Method Pattern&#xff09;。换而言之&#xff0c;我们希望使用一个这样的接口&#xff0c;使用其他手段而不是直接创建的方式&#xff08;说的有…...

云原生 Cloud Native Build (CNB)使用初体验

云原生 Cloud Native Build&#xff08;CNB&#xff09;使用初体验 引言 当“一切皆可云”成为趋势&#xff0c;传统开发环境正被云原生工具重塑。腾讯云CNB&#xff08;Cloud Native Build&#xff09;作为一站式开发平台&#xff0c;试图解决多环境协作难题。 本文将分享c…...

格式工厂 FormatFactory v5.20.便携版 ——多功能媒体文件转换工具 长期更新

—————【下 载 地 址】——————— 【​本章下载一】&#xff1a;https://pan.xunlei.com/s/VORWF3Q7D0eCVV06LHbzheD-A1?pwdjikz# 【​本章下载二】&#xff1a;https://pan.quark.cn/s/8ee59ed83658 【百款黑科技】&#xff1a;https://ucnygalh6wle.feishu.cn/wiki/…...

数据可视化--使用matplotlib绘制高级图表

目录 一、绘制等高线图 contour() 二、绘制矢量场流线图 streamplot() 三、绘制棉棒图 stem() 四、绘制哑铃图 五、绘制甘特图 六、绘制人口金字塔图 barh() 七、绘制漏斗图 简易版漏斗图 八、绘制桑基图 Sankey()---创建桑基图 add()---添加桑基图的选项 finish()…...

卷积神经网络(CNN)完全指南:从原理到实战

卷积神经网络(CNN)完全指南&#xff1a;从原理到实战 引言&#xff1a;为什么CNN改变了计算机视觉&#xff1f; 2012年&#xff0c;AlexNet在ImageNet竞赛中以压倒性优势获胜&#xff0c;将错误率降低了近10个百分点&#xff0c;这标志着卷积神经网络(CNN)时代的开始。如今&a…...

如何做好一个决策:基于 Excel的决策树+敏感性分析应用

决策点: 开发新产品? (是 / 否) 因素 (如果是): 市场接受度 (高 / 中 / 低);概率: 高(0.3), 中(0.5), 低(0.2) 结果值 (NPV): 高(+$1M), 中(+$0.2M), 低(-$0.5M) 不开发成本/收益: $0 开发计算: EMV(市场接受度) = (0.3 * 1M) + (0.5 * 0.2M) + (0.2 * -0.5M) = $0.3M + $…...

【模拟电子电路-工具使用】

模拟电子电路-工具使用 ■ 1. 模拟软件■ 1. circuit JS ■ 2. 万用表■ 3. 示波器■ 4.■ 5.■ 6.■ 7. ■ 1. 模拟软件 ■ 1. circuit JS ■ 2. 万用表 ■ 3. 示波器 ■ 4. ■ 5. ■ 6. ■ 7....

[ElasticSearch] ElasticSearch的初识与基本操作

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…...

Spring AI 代理模式(Agent Agentic Patterns)

一、Agentic Patterns 核心思想 根据Anthropic《构建高效代理》研究报告&#xff0c;高效LLM代理的设计应遵循两大核心原则&#xff1a; 简单性优先&#xff1a;避免过度设计&#xff0c;从最简单的解决方案开始可组合性&#xff1a;通过模块化设计实现灵活组合而非复杂框架 …...

搜索引擎2.0(based elasticsearch6.8)设计与实现细节(完整版)

1 简介 1.1 背景 《搜索引擎onesearch 1.0-设计与实现.docx》介绍了1.0特性&#xff0c;搜索schema&#xff0c;agg&#xff0c;表达式搜索映射&#xff0c;本文介绍onesearch 2.0 新特性, 参考第2节 规划特性与发布计划 1.2 关键词 文档 Document elasticsearch 一行数据称为…...

ps中前景色和背景色

在Photoshop&#xff08;简称PS&#xff09;中&#xff0c;前景色和背景色是两个非常重要的概念&#xff0c;它们直接影响着绘图、填充、渐变等操作的最终效果。以下是对前景色和背景色的全面、深入解释&#xff1a; 一、前景色与背景色的定义 前景色&#xff1a;指的是当前绘…...

网页前端开发(基础进阶2--JS)

前面学习了html与css&#xff0c;接下来学习JS&#xff08;JavaScript与Java无关&#xff09;。 web标准&#xff08;网页标准&#xff09;分为3个部分&#xff1a; 1.html主要负责网页的结构&#xff08;页面的元素和内容&#xff09; 2.css主要负责网页的表现&#xff08;…...

Go 即时通讯系统:客户端与服务端 WebSocket 通信交互

客户端和服务端的交互 客户端与服务端建立连接 客户端&#xff1a;客户端通过浏览器或者其他应用程序发起一个 HTTP 请求到服务端的 /socket.io 路径。在请求中会携带用户的 UUID 作为参数&#xff08;通过 c.Query("user") 获取&#xff09;。 // router/socket.…...

2025年5月AI科技领域周报(5.19-5.25):大模型多模态突破 具身智能开启机器人新纪元

2025年5月AI科技领域周报&#xff08;5.19-5.25&#xff09;&#xff1a;大模型多模态突破 具身智能开启机器人新纪元 目录 2025年5月AI科技领域周报&#xff08;5.19-5.25&#xff09;&#xff1a;大模型多模态突破 具身智能开启机器人新纪元一、本周热点回顾1. 百度发布全球首…...

某航后缀混淆逆向与顶像风控分析

文章目录 1. 写在前面2. 接口分析3. 加密分析4. 风控分析 【&#x1f3e0;作者主页】&#xff1a;吴秋霖 【&#x1f4bc;作者介绍】&#xff1a;擅长爬虫与JS加密逆向分析&#xff01;Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致…...

[Protobuf]常见数据类型以及使用注意事项

[Protobuf]常见数据类型以及使用注意事项 水墨不写bug 文章目录 一、基本数据类型1、字段2、字段的修饰规则 二、自定义数据类型1、message类型2、enum类型3、Any类型4、oneof类型5、map类型 三、小工具1.hexdump2.decode 四、注意事项 一、基本数据类型 protobuf 支持多种基础…...