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

大文件上传解决方案

一、业务场景:

ai课堂需求,涉及到视频的播放,需要在后台上传视频,视频的最大限制是500MB,当视频较大的时候,普通的上传会有问题,导致上传失败。这就要求我们将大文件进行拆分,分片进行上传,在所有分片上传成功之后,再进行合并。

二、前后端交互流程:

1、前端调用后端分片文件上传初始化接口

2、在初始化接口调用后,后端给前端返回分片上传的地址,分片数量是几个,后端就会给前端返回几个地址。前端去调用这些地址(前端直连minio),进行分片上传。

3、待所有分片都上传完毕后,调用合并接口进行文件的合并。

最终得到完整的视频播放地址。

三、核心代码

/分片上传axiosPartUpload(file) {//分片大小const chunkSize = 10 * 1024 * 1024;const fileSize = file.size//计算当前选择文件需要的分片数量const chunkCount = Math.ceil(fileSize / chunkSize)this.totalCount=chunkCount;let initParams={fileName:file.name,fileSize:fileSize,partCount:chunkCount,contentType:file.type}this.isUploading=true;//调用初始化接口initUpload(initParams).then(async res=>{console.log(res,'初始化接口返回结果')this.uploadId=res.uploadId;this.objectName=res.objectName;let urlList=res.urlList;for(let i=0;i<urlList.length;i++){//文件截取let start = i * chunkSize;let end = Math.min(fileSize, start + chunkSize);let chunkFile = file.slice(start, end);//调用分片上传接口await uploadPart(urlList[i],chunkFile).then(res2=>{    console.log(`第${i+1}个分片上传成功`)this.successCount=i+1;}).catch(err=>{this.isUploading=false;this.$message.error(`第${i+1}个分片上传失败`)})}//所有分片上传完成之后,进行合并let mergeParams={uploadId:this.uploadId,objectName:this.objectName}mergeFile(mergeParams).then(res2=>{console.log(res2,'合并接口返回结果')this.$emit("getVideoUrl", res2.fileUrl, file.name);this.$message({message: "上传成功",type: "success"});this.isUploading=false;})}).catch(err=>{this.isUploading=false;this.$message({message: "上传失败,请重新选择文件上传!",type: "error"})})},

四、存在问题

1、缺少断点续传逻辑。

2、分片串行上传,上一分片上传结束后上传下一分片,效率不高。

http://www.dtcms.com/a/329104.html

相关文章:

  • React useMemo 深度指南:原理、误区、实战与 2025 最佳实践
  • 【SpringBoot系列-01】Spring Boot 启动原理深度解析
  • C->C++核心过渡语法精讲与实战
  • 深度学习——03 神经网络(2)-损失函数
  • Spring Boot 使用 @NotBlank + @Validated 优雅校验参数
  • react+antd+vite自动引入组件、图标等
  • 适配安卓15(对应的sdk是35)
  • 单片机启动流程详细介绍
  • 开源WAF新标杆:雷池SafeLine用语义分析重构网站安全边界
  • vscode远程服务器出现一直卡在正在打开远程和连接超时解决办法
  • SpringBoot 整合 Langchain4j 系统提示词与用户提示词实战详解
  • IV模型(工具变量模型)
  • 《论文阅读》从特质到移情:人格意识多模态移情反应生成 ACL 2025
  • Dify-17: 扩展模型提供方
  • PyTorch简介
  • layui表格自定义导出数据(选中和全部数据)
  • Debian新一代的APT软件源配置文件格式DEB822详解
  • k8s中的微服务
  • CSS动态视口单位:彻底解决移动端适配顽疾,告别布局跳动
  • Prompt Engineering+AI工具链:打造个人专属的智能开发助手
  • 第六十六篇:AI模型的“口才”教练:Prompt构造策略与自动化实践
  • 从0开始跟小甲鱼C语言视频使用linux一步步学习C语言(持续更新)8.13
  • SplitLanzou安卓版(蓝奏云第三方客户端) v1.8.2 免费版
  • 云计算-实战 OpenStack 私有云运维:服务部署、安全加固、性能优化、从服务部署到性能调优(含数据库、内核、组件优化)全流程
  • 飞凌OK3568开发板QT应用程序编译流程
  • Nginx 超详细详解和部署实例
  • 大致计算服务器磁盘使用情况脚本
  • 从零到一:TCP 回声服务器与客户端的完整实现与原理详解
  • pycharm配置连接服务器
  • 解析Vue3中集成WPS Web Office SDK的最佳实践