vue3+vue-simple-uploader实现大文件上传

本文介绍了如何在Vue3中使用vue-simple-uploader组件进行大文件上传,包括实现秒传、断点续传和最新上传功能。通过设置`autoStart=false`来手动上传,并利用`testChunks`进行文件校验。文章详细解析了自动校验的逻辑,以及MD5计算在断点续传中的应用。此外,还提供了代码实现和思维导图辅助理解。
摘要由CSDN通过智能技术生成

vue-simple-uploader本身是基于vue2实现,如果要使用vue3会报错。如何在vue3中使用,可参考我的另一篇文章:解决vue3中不能使用vue-simple-uploader__Jyann_的博客-CSDN博客

一.实现思路

  1. 使用vue-simple-uploader组件的uploader组件,设置自动上传为false,即可开启手动上传。:autoStart=false
  2. 设置上传参数options中的数据(target、chunkSize,fileParameterName、maxChunkRetries、testChunks、checkChunkUploadedByResponse、parseTimeRemaining);
  3. 设置testChunk:true组件会自动发起同url地址的get方式进行校验(实现秒传、分片续传、最新上传)
  4. 进行MD5计算(使用spark-md5)

二.重点理解

1:如何实现自动校验

uploader组件options参数中设置testChunks就会发送get请求到后端进行校验。需要后端有校验逻辑。

校验规则:

  1. 后端根据文件名(可不用)+md5去查找本地或者数据库有没有该文件上传记录,有则已经上传过,返回已上传过标识skipUploader;
  2. 如果上传过部分分片,则返回uploadedChunks数组,组件会自动跳过这些已经上传过的分片;
  3. 如果以上都没有上传会重新开始上传;

前端发送get请求后,会通过options的参数中checkChunkUploadedByResponse方法进行拦截:

  1. 如果skipUpload为true则返回true,不再进行后续操作;
  2. 如果uploadedChunks则返回后续的分片,跳过已上传的分片;
  3. 如果没有上传过不会进入此方法;

2:如何实现秒传、断点续传、最新上传

后端get请求中校验是否有上传过文件,上传过则秒传,上传过部分分片则断点续传,否则重新上传。

前端通过checkChunkUploadedByResponse获取和设置后端返回的结果

3、MD5计算

  1. 首先设置不自动上传:autoStart=false
  2. 然后通过FileReader读取文件,及对文件进行切片File.prototype.slice
  3. 根据文件大小和分片大小,切片后循环读取文件,并计算MD5
  4. 通过spark-md5计算分片的md5

三.代码实现 

<template>
    <uploader :options="options" :fileStatusText="fileStatusText" class="uploader-example" ref="uploaderRef"
    :auto-start="false
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现Vue3全局上传视频,你可以按照以下步骤操作: 1. 首先,确保你已经学习了Vite Vue3 TypeScript的基础知识,并了解Vue3的基本语法和特性。这可以帮助你更好地理解并编写Vue3的代码。 2. 为了实现全局上传视频功能,你可以使用Vue3全家桶中的Vue-Router、Vuex和Axios。Vue-Router用于处理路由跳转,Vuex用于全局状态管理,Axios用于发送网络请求。此外,如果你需要使用Element Plus来构建UI界面,也可以集成它。 3. 首先,在你的Vue3项目中安装所需的依赖包。你可以通过在终端中导航到你的项目目录并运行以下命令来完成安装: ``` npm install vue-router vuex axios ``` 4. 在你的项目中,创建一个文件用于处理视频上传的逻辑。你可以给它起一个适合的名称,比如"VideoUpload.vue"。 5. 在"VideoUpload.vue"文件中,导入所需的依赖包,并创建组件的模板和逻辑代码。你可以使用Vue3的语法和模板来构建上传视频的界面。 6. 在Vue-Router中配置一个路由,将"VideoUpload.vue"组件与特定的URL路径关联起来。这样,当用户访问该路径时,将会显示视频上传界面。 7. 在Vuex中定义一个全局状态,用于存储已上传的视频信息。你可以在"VideoUpload.vue"组件中使用Vuex来获取和更新这个状态,并将上传的视频信息保存到全局状态中。 8. 使用Axios库来发送视频上传请求。你可以在"VideoUpload.vue"组件中编写上传视频的逻辑,并将视频文件发送到服务器。 9. 最后,根据你的需求对上传视频的逻辑进行扩展和优化。你可以添加一些额外的功能,比如显示上传进度、限制上传文件大小等。 需要注意的是,以上步骤只是一个简单的指导,具体的实现方法会根据你的项目需求和技术选型有所不同。你可以参考Vue3的官方文档和相关教程来深入学习和理解Vue3的使用方法。同时,也可以参考提供的视频教程来获取更多关于Vue3基础知识的案例演示。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Vite+Vue3+TypeScript](https://blog.csdn.net/Yun__shen/article/details/122533407)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Vue3+ElementPlus+TS](https://blog.csdn.net/ianutt/article/details/126724001)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值