讲师中心 微信公众号
AI工具推荐 视频效率加速

如何通过字节流实战读取视频变量文件并实现分片上传的逻辑封装

风杰同学_8721

风杰同学_8721

发布时间:2026-05-20 20:24:45

|

1000人浏览过

|

来源于php中文网

原创

关键在于切得准、传得稳、续得上:按固定大小分片读取字节流,携带序号、总片数、文件标识等元信息;流式读取防OOM;客户端管理状态与重试;服务端支持断点续传与校验。

如何通过字节流实战读取视频变量文件并实现分片上传的逻辑封装

直接用字节流读取视频文件并分片上传,关键不在“读得多”,而在“切得准、传得稳、续得上”。核心是把大视频按固定大小切块,每块转成字节流上传,同时带好序号、总片数、文件标识等元信息,服务端才能正确拼接。

视频文件的字节流读取与分片切分

不推荐一次性 load 全量到内存(易 OOM),应使用 RandomAccessFile 或 FileChannel 配合 ByteBuffer 流式读取。Java 示例逻辑如下:

  • 通过 file.length() 获取总大小,设定分片大小(如 5MB)
  • 循环计算起始偏移 start = i * chunkSize 和结束位置 end = Math.min(start + chunkSize, fileSize)
  • 用 raf.seek(start) 定位,再用 raf.read(buffer) 读取实际字节数(最后一片常不足 5MB)
  • 将读出的有效字节封装为 byte[] 或临时 File,作为单个分片参与上传

分片上传的客户端逻辑封装要点

前端或 Java 客户端需统一管理状态和重试,避免裸调 HTTP。封装时重点关注:

  • 唯一标识生成:对原始文件算一次 MD5(或 UUID)作为 fileId,所有分片共用,便于服务端归组
  • 分片元数据携带:每个请求必须含 fileId、chunkNumber(从 1 开始)、totalChunks、chunkMd5(可选,用于校验单片完整性)
  • 并发与限流:限制最大并行数(如 3~5 个),配合重试机制(失败自动重传 ≤3 次)
  • 进度与中断记录:上传前本地缓存已成功分片列表;中断后再次上传时先查服务端已存分片,跳过已传项

服务端接收与合并逻辑衔接

客户端上传只是第一步,服务端需配套支持才能落地:

  • 接收接口保存分片到临时目录(命名建议:{fileId}_{chunkNumber}.part),并记录数据库或 Redis 中的上传状态
  • 提供 /check-upload?fileId=xxx 接口,返回已上传的 chunkNumber 列表,支撑断点续传
  • 合并阶段使用 RandomAccessFile 或 Files.write(..., StandardOpenOption.APPEND) 按序写入,避免内存加载全量
  • 合并完成后校验最终文件 MD5,与客户端上传的 totalMd5 对比,确保一致性

实战中容易忽略的细节

很多项目卡在“能传但不稳定”,问题往往出在边界处理:

  • 最后一片不满分片大小时,read() 返回值可能小于 buffer 长度,必须用实际读取长度构造有效 byte[],否则会传入填充字节导致视频损坏
  • HTTP 请求头要设 Content-Type: multipart/form-data,且分片字段名和服务端约定一致(如 file 字段传二进制,chunkNumber 传文本)
  • 服务端临时目录需有写权限,且定期清理超时未合并的碎片(如 24 小时未完成则自动删除)
  • 移动端或弱网环境下,建议增加分片大小自适应(如网络差时降为 2MB),或加入请求超时与连接复用控制

热门AI工具

更多
切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

11077

2023.06.15

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

8182

2023.07.05

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

7092

2023.07.31

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1184

2023.08.01

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

968

2023.08.02

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

1436

2023.08.02

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2909

2023.08.02

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

20191

2023.08.03

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

0

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn