文件上传之vuejs分块上传,js同理,可实现暂停、续传等

PHP大文件上传(切片)分享 前端:vue2,vue3,vue-cli,html5,jquery,webuploader后端:php服务器:linux,centos,Windows,数据库:MySQL,达梦数据库,人大金仓平台:Windows,macOS,Linux,Ubuntu,RedHat,中标麒麟,银河麒麟,统信UOS,信创国产化CPU:x86(Intel,AMD,兆芯,海光),arm(鲲鹏,飞腾),龙芯(mips),龙芯(LoongArch)场景:内网,外网,政府,涉密环境,信创国产化项目。 阅读详情

前段代码

分块代码核心代码为:

const blob = rawFile.slice(start, end)

案例示例:

文件大于5242880(大概5M)时,我们将大文件拆分为5M大小的多个小块上传,后端再做拼接。这样不会出现,超大文件带来的一系列问题,并且可以实现暂停续传等操作。

一下为示例: 

async function uploadEcm(rawFile, folderId) {
  const oktoken = await getToken()
  const firstN = rawFile.name.split('.')
  const fileName = firstN[0] + Math.random().toString(36) + '.' + firstN[firstN.length - 1]
  const data = new FormData()
  data.append('fileName', fileName)
  data.append('token', oktoken)
  data.append('folderId', folderId) // TODO
  data.append('size', rawFile.size)
  data.append('type', rawFile.type)
  data.append('attachType', 0)
  data.append('fileModel', 'UPLOAD')
  data.append('name', '')
  console.log('rawFile', rawFile)
  const result = await getRegHash(data, oktoken)
  let start = 0
  let end = 0
  const lentgh = 5242880
  const uploadId = guid()
  // 分块数
  const chunks = Math.ceil(rawFile.size / 5242880)
  if (chunks == 1) {
    await blockUpload(result, fileName, rawFile, chunks, 0, lentgh, rawFile.size, rawFile, oktoken, uploadId)
  } else if (chunks > 1) {
    for (let i = 0; i < chunks; i++) {
      let blockSize = lentgh
      if (i == (chunks - 1)) {
        blockSize = rawFile.size - end
        end = rawFile.size
      } else {
        end = start + lentgh
      }
      const blob = rawFile.slice(start, end)
      start = end
      await blockUpload(result, fileName, rawFile, chunks, i, lentgh, blockSize, blob, oktoken, uploadId)
    }
  }
  return new Promise(resolve => {
    resolve(result)
  })
}

将每块上传后台:

function blockUpload(res, fileName, rawFile, chunks, i, lentgh, blockSize, blob, oktoken, uploadId) {
  return new Promise(resolve => {
    const data2 = new FormData()
    data2.append('uploadId', uploadId)
    data2.append('regionHash', res.data.data.RegionHash)
    data2.append('regionId', res.data.data.RegionId)
    data2.append('fileName', fileName)
    data2.append('size', rawFile.size)
    data2.append('chunks', chunks)
    data2.append('chunk', i)
    data2.append('chunkSize', lentgh)
    data2.append('blockSize', blockSize)
    data2.append('file', blob)
    console.log('res', res)
    myaxios.post(getEcmBaseUrl() + '/document/upload?code=&token=' + oktoken, data2, {
      headers: {
        'Content-Type': 'multipart/form-data'
      }
    }).then(res => {
      resolve(true)
    }).catch(reason => {
      resolve(false)
    })
  })
}

 

使用axios的cancelToken实现文件上传中途取消 首先文件上传可以使用el-upload组建,但它的底层使用的封装的ajax来实现文件上传,官方介绍里面说 abort()方法可以取消上传,但是我没有实现出来????????????,欢迎实现的大佬分享出来。 然后文件上传也可以用input的file属性来实现,我这里就用的这个方法。取消的实现是利用来axios已经封装好的cancelToken来中断一个正在发送的请求。 <div> <input class="file" name="file" type="file" m 阅读详情

相关推荐

Qt多线程实战:如何优雅地处理Modbus设备通信中的线程安全问题

本文深入探讨了在Qt框架下实现Modbus设备通信时的多线程安全问题,提供了优雅的解决方案。通过生产者-消费者模型、任务队列与锁机制等设计模式,有效解决了界面卡顿、数据包错乱等问题。文章还详细介绍了对象生命周期管理、信号槽连接类型选择等关键实现细节,帮助开发者构建稳定可靠的Modbus通信模块。

weixin_30897233的博客 484

Vue实现大文件分片上传,包括断点续传以及上传进度条

分片上传就是把一个大的文件分成若干块,一块一块的传输。这样做的好处可以减少重新上传的开销。比如:如果我们上传的文件是一个很大的文件,那么上传的时间应该会比较久,再加上网络不稳定各种因素的影响,很容易导致传输中断,用户除了重新上传文件外没有其他的办法,但是我们可以使用分片上传来解决这个问题。通过分片上传技术,如果网络传输中断,我们重新选择文件只需要传剩余的分片。而不需要重传整个文件,大大减少了重传的开销。但是我们要如何选择一个合适的分片呢?

yjxkq99的博客 2万+

Matplotlib字体警告终结者:为什么总提示DejaVu Sans?5种场景解决方案大全

本文深入解析Matplotlib中常见的DejaVu Sans字体警告问题,并提供5种典型场景的完整解决方案。从理解字体系统的三层架构和缓存机制,到解决中文显示、远程服务器部署、TeX渲染、缓存优化及生产环境配置等实际问题,帮助开发者彻底摆脱字体警告困扰,实现稳定可靠的数据可视化。

view3的博客 502

Vue项目中大文件切片上传实现秒传、断点续传的详细实现教程

本文将介绍如何在Vue项目中使用切片上传实现文件上传的高级功能,包括文件秒传、断点续传、错误重试、控制并发等,并且还将绘制一个上传进度条,让用户能够清晰地看到上传进度。同时,我们还将介绍如何通过一些优化措施,进一步提高上传效率。

weixin_63929524的博客 1万+

AS7341光谱传感器实战:如何用STM32F103精准测量环境色温(附完整代码)

本文详细介绍了如何使用STM32F103驱动AS7341光谱传感器实现环境色温的精准测量。从硬件连接到驱动开发,再到色温计算算法的实现,提供了完整的代码示例和优化建议,帮助开发者在智能照明、农业监测等领域快速应用AS7341进行高精度色温检测。

weixin_30352645的博客 478

NR RRC协议(2)---RRC连接建立流程

RRC连接建立目的是建立SRB1 RRC连接建立还用于将初始NAS消息从UE传送到网络 RRC连接的初始阶段期间,不激活AS安全性 RRC连接建立由UE侧发起

crg2046的博客 1957

使用JS请你实现一个大文件上传和断点续传

大文件上传 整体思路 前端 前端大文件上传网上的大部分文章已经给出了解决方案,核心是利用 Blob.prototype.slice方法,和数组的 slice 方法相似,调用的 slice 方法可以返回原文件的某个切片 这样我们就可以根据预先设置好的切片最大数量将文件切分为一个个切片,然后借助 http 的可并发性,同时上传多个切片,这样从原本传一个大文件,变成了同时传多个小的文件...

java、c++、机器学习方向King 1819

光学仿真案例(4) 基于纳米微粒激发平面波的米氏散射FDTD仿真模拟

本案例展示了一个基于纳米粒子激发平面波的米氏散射仿真模型(mie scattering),计算其散射和吸收截面、局域场增强和远场散射分布,同时将截面和远场结果与解析解进行了比较,验证了仿真模拟的准确性。

q895235273的博客 3593

vue3.0 elementUI实现上传文件的暂停继续功能

uploadList.vue <template> <div class="uploader-list"> <ul v-if="fileList.length>0"> <li v-for="file in fileList" :key="file.id"> <div class="fileItem"> <span>{{file.name.length.

weixin_46641826的博客 2906

【Bug已解决】npm install -g @anthropic-ai/claude-code 出现 EACCES: permission denied 解决方案

方案适用场景推荐指数nvm 管理 Node长期开发环境,一次配置永久生效⭐⭐⭐⭐⭐修改 npm 全局目录不想引入 nvm,快速解决⭐⭐⭐⭐修复现有目录权限之前用过 sudo 装包,需要修复⭐⭐⭐Windows 管理员/改目录Windows 平台专用⭐⭐⭐⭐官方原生安装脚本想彻底避开 npm 权限问题⭐⭐⭐⭐报的本质是npm 全局安装目录的属主权限与当前执行用户不匹配,而不是 npm 或 Claude Code 本身有问题。不要用sudo"强行"解决。

一键难忘的博客 1万+

安卓手机强制清理数据恢复出厂设置后无法设置密码怎么办?(分享亲身经历的有效解决方案)

📱安卓手机强制清数据恢复出厂设置后,竟无法设置锁屏密码!本文将解析问题根源,分享亲测有效的解决方案,帮你快速摆脱困扰🎉

XiaoqiangClub的博客 242

隐藏vue-simple-uploader组件文件上传列表的暂停、开始等操作按钮

  前段时间,针对大文件上传使用 vue-simple-uploader 实现切片上传。有同事反应,在进行计算文件md5的时候,选中的文件会处于暂停上传的状态,让人有点击继续按钮的冲动,让我将操作按钮隐藏掉。   本来想直接更改 vue-simple-uploader 组件的代码,结果细看了一下,果断放弃。毕竟上传文件列表 uploader-list 使用了 uploader-file。不能直接修改 uploader-file 实现这一需求。 所以,直接从最简单的样式上进行调整。 获取操作按钮的样式:

qq_17328759的博客 8976

CANoe制作网关实现CAN(FD)报文故障注入(报文长度/timeout/信号错误/E2E)2

CANoe制作网关实现CAN报文故障注入(报文长度/timeout/信号错误/E2E) 2.新建CANoe工程 3.透传功能 4.故障注入panel面板 5.CAPL代码 5.1故障注入开始、停止、定时 5.2DLC故障注入 5.3 Timeout故障注入 5.4 信号故障注入

天赐好车的博客 3675

前端大文件切片上传,断点续传、秒传等解决方案,vue中使用实例,react同理

前端大文件上传、前端大文件切片、vue上传大文件

随心博客 1434

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

大文件断点续传上传插件实战:切片、哈希与Web Worker

文件上传是所有Web应用的基础能力,但当单个文件达到数百MB甚至GB级时,传统一次性提交方式会面临网络超时、服务端限制、重传成本高等一系列问题。断点续传作为一种可靠的大文件传输策略,核心思想是将大文件切分为独立的分片,记录已上传状态,网络中断后仅重传未完成部分,从而大幅提升上传成功率。这一机制还天然支持秒传与并发加速,成为网盘、内部系统等场景的标配。要实现工程级断点续传,前端需要解决分片大小规划、文件指纹计算、断点信息存储等关键问题,其中Web Worker承担了重度哈希计算,避免阻塞UI线程。本文完整复盘

weixin_34262482的博客 111

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

前端必学 - 大文件上传如何实现

前端必学 - 大文件上传如何实现写在前面问题分析开始操作文件如何切片 写在前面 1、正常的向后端发送请求,常见的 get、post 大家都很熟悉,是没有任何问题的;我们也可以用 post 或者表单请求发送 file文件 到后端。 但是大文件的上传是一个特殊的情况: 大文件上传最主要的问题就在于:在同一个请求中,要上传大量的数据,导致整个过程会比较漫长,且失败后需要重头开始上传。 首先是上传过程时间比较久,(要传输更多的报文,丢包重传的概率也更大),在这个过程中不能做其他操作,用户不能刷新页面,只能耐心等待

热爱思考、活力满满、开朗爱笑的年轻人 1万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

vue3如何实现断点续传(附源码)

vue3断点续传示例,附源码文件

编程似海、 1950

基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件功能

之前公司要在管理系统中做一个全局上传插件,即切换各个页面的时候,上传界面还在并且上传不会受到影响,这在vue这种spa框架面前并不是什么难题。然而后端大佬说我们要实现分片上传、秒传以及断点续传的功能,听起来头都大了。很久之前我写了一篇webuploader的文章,结果使用起来发现问题很多,且官方团队不再维护这个插件了, 经过多天调研及踩雷,最终决定基于插件实现该功能,在项目中使用起来无痛且稳定。如果你只是想实现基本的(非定制化的)上传功能,直接使用,多读一下它的文档,不需要更多的二次封装。

weixin_42308266的博客 2468

Vue使用AWS s3进行大文件的分片上传、断点续传、下载(将文件上传进度显示)

Vue使用AWS s3进行大文件的分片上传、断点续传、下载(将文件上传进度显示)

qq_45634989的博客 1万+

vue之大文件分段上传、断点续传

用户本地有一份txt或者csv文件,无论是从业务数据库导出、还是其他途径获取,当需要使用蚂蚁的大数据分析工具进行数据加工、挖掘和共创应用的时候,首先要将本地文件上传至ODPS,普通的小文件通过浏览器上传至服务器,做一层中转便可以实现,但当这份文件非常大到了10GB级别,我们就需要思考另一种形式的技术方案了,也就是本文要阐述的方案。分片上传的好处是将一个大请求分成多个小请求来执行,这样当其中一些请求失败后,不需要重新上传整个文件,而只需要上传失败的分片就可以了。客户端向服务器端发起获得授权的请求。...

weixin_52041354的博客 940

Vue+ElementUi文件上传列表、断点续传、继续、暂停、forceUpdate、setInterval、lastIndexOf、substring、unshift、every、some、pop

Vue+ElementUi文件上传列表、断点续传、继续、暂停、forceUpdate、setInterval、lastIndexOf、substring、unshift、every、some、pop

优快云博客主页地址:https://mengjian.blog.youkuaiyun.com/ 5114

多图片上传删除-vue-element ui 组件

O - 功能说明 图片的上传删除回显修改功能 ,上传到oss。 Ⅰ- 壹 - 效果展示 Ⅱ - 贰 - 代码文件 一 创建文件uploadImgCom.vue <template> <el-upload class="avatar-uploader" ref="upload_img" action="" accept="image/jpeg,image/jpg,image/png" list-typ

三季雨 1006

vue文件直传阿里云,有进度条,支持中断取消上传

作为后端开发兼顾前端页面的实现,说实话,遇到的问题绝不会少,但方法总比问题多,坚持努力总会有成果的。 最近项目使用vue的el-upload上传文件,因为后期对文件的加载速度及并发数有较高要求,所以文件需上传至阿里云,在实现过程主要有两个功能点需自己实现,其他均可参考文档 1、实现进度条展示 API文档中进度条的实现是通过上传接口返回的,但我们实际的接口基本很难满足这个数据返回,所以我们必须通过监控请求进度从而实现进度条的展示,主要使用onUploadProgress,具体实现如下(省略全部代码,只只

xi_nuo的博客 1537

大文件上传实现指南 秒传 暂停上传+续传 vue3+node

chunks.js` 文件实现了一个文件分片上传的功能,通过 `ChunkSplitor` 类将文件分割成多个块,并计算每个块的哈希值,然后通过 `UploadController` 类管理上传过程,使用 `RequestStrategy` 类定义具体的上传策略。

weixin_45819973的博客 980

Element UI + Vue 批量上传图片(只请求一次)

在使用elementui上传组件时,可以一次选择多个文件上传,设置:multiple="true"可以选择多个文件,但是文件请求的时候还是分开请求,多少个图片请求多少次。 现在需求时一次请求上传所有选中的图片 主要步骤:(1)通过elementui组件选取需要上传图片(2)封装上传函数 代码: hmtl部分: <!-- 上传图片 --> <el-dialog title="选择上传图片" :visible.sync="dialogVisible_up_image" width=

qq_33290968的博客 4326

Vue+SpringBoot上传大文件,包括暂停和继续(适用Vue2和Vue3)

Vue+SpringBoot上传大文件,包括暂停和继续,以及进度条process的展示(适用Vue2和Vue3)

weixin_43977534的博客 5346
上一篇: js判断手机端动态跳转页面
下一篇: ubuntu20.04安装idea/datagrip
grootblockchain
博客等级 码龄11年 55粉丝 101原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值