vue 3文件上传暂停需分片处理并用状态机控制:将文件切分为独立块,上传前查询已存分片,通过uploadstatus、ispaused等响应式状态管理流程,uploadnextchunk递归上传并校验暂停状态,服务端配合提供分片验证与合并接口。

Vue 3 中处理文件上传暂停,核心在于把“上传”从单次请求拆解为可中断、可恢复的分片任务,并用状态机控制流程。不是简单调用 axios.cancel() 就能实现真正断点续传——那只是中断请求,下次还得重头来。
用分片上传构建可暂停的基础
暂停能力的前提是文件被切分成多个独立小块(如每块 5MB),每个块单独发起上传请求。这样暂停时只需停止后续分片发送,已成功上传的分片保留在服务端,恢复时跳过它们即可。
- 使用
File.slice(start, end)按固定大小切割文件,生成 Blob 数组 - 为每个分片生成唯一标识(如
${fileId}-${index}),便于服务端识别和去重 - 上传前先向后端查询哪些分片已存在,填充
uploadedChunks列表
用响应式状态驱动暂停/恢复逻辑
定义清晰的状态变量,让 UI 和行为同步响应用户操作:
-
uploadStatus: ref—— 控制主流程状态 -
isPaused: ref(boolean)—— 独立开关,配合定时器或递归上传逻辑做条件判断 -
pendingChunks: ref<chunk>()</chunk>—— 存储待上传分片队列,暂停时保留未执行项 - 点击“暂停”时只设
isPaused.value = true,不销毁请求或清空队列 - 点击“继续”时检查
isPaused.value === false后触发下一分片上传
在上传循环中嵌入暂停检查点
避免用 for 或 forEach 一次性遍历所有分片——那样无法中途打断。推荐用递归函数或 async/await + while 循环,在每次上传前校验状态:
- 写一个
uploadNextChunk()函数,内部先判断if (isPaused.value) return - 上传成功后,更新进度、标记该分片完成、再调用自身上传下一个
- 失败时记录错误但不终止流程,支持后续重试或跳过
- 整个过程不依赖全局定时器,靠函数调用链自然推进
服务端需配合提供分片查询与合并接口
前端暂停再继续,必须和服务端协同才能真正“续传”:
- 上传前调用
/api/chunks/verify?fileId=xxx获取已上传分片索引列表 - 每个分片上传携带
chunkIndex和totalChunks,方便服务端校验顺序 - 全部分片上传完成后,主动调用
/api/files/merge触发服务端合并 - 若合并失败,前端应允许重新触发合并,而非重复上传所有分片
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










