vue前端上传文件夹的插件_基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件...

1. 前言之前公司要在管理系统中做一个全局上传插件,即切换各个页面的时候,上传界面还在并且上传不会受到影响,这在vue这种spa框架面前并不是什么难题。然而后端大佬说我们要实现分片上传、秒传以及断点续传的功能,听起来头都大了。很久之前我写了一篇webuploader的文章,结果使用起来发现问题很多,且官方团队不再维护这个插件了, 经过多天调研及踩雷,最终决定基于vue-simple-uploade...
摘要由CSDN通过智能技术生成

1. 前言

之前公司要在管理系统中做一个全局上传插件,即切换各个页面的时候,上传界面还在并且上传不会受到影响,这在vue这种spa框架面前并不是什么难题。然而后端大佬说我们要实现分片上传、秒传以及断点续传的功能,听起来头都大了。

很久之前我写了一篇webuploader的文章,结果使用起来发现问题很多,且官方团队不再维护这个插件了, 经过多天调研及踩雷,最终决定基于vue-simple-uploader插件实现该功能,在项目中使用起来无痛且稳定。

如果你只是想实现基本的(非定制化的)上传功能,直接使用vue-simple-uploader,多读一下它的文档,不需要更多的二次封装。

如果你只是想实现全局上传插件,也可以参照一下我的实现。

如果你用到了分片上传、秒传及断点续传这些复杂的功能,恭喜你,这篇文章的重点就在于此。

2. 关于vue-simple-uploader

vue-simple-uploader是基于 simple-uploader.js 封装的vue上传插件。它的优点包括且不限于以下几种:

支持文件、多文件、文件夹上传;支持拖拽文件、文件夹上传

可暂停、继续上传

错误处理

支持“秒传”,通过文件判断服务端是否已存在从而实现“秒传”

分块上传

支持进度、预估剩余时间、出错自动重试、重传等操作

读这篇文章之前,建议先读一遍simple-uploader.js的文档,然后再读一下vue-simple-uploader的文档,了解一下各个参数的作用是什么,我在这里假定大家已经比较熟悉了。。

vue-simple-uploader文档

安装:npm install vue-simple-uploader --save

使用:在main.js中:

import uploader from 'vue-simple-uploader'

Vue.use(uploader)

3. 基于vue-simple-uploader封装全局上传组件

引入vue-simple-uploader后,我们开始封装全局的上传组件globalUploader.vue,代码比较长,就不整个放出来了,源码放到github上了,这里一步一步地讲解。

template部分如下,本人自定义了模板和样式,所以html部分比较长,css部分暂时不列出,大家可以根据自己的ui去更改,主要关注一下uploader这个组件的options参数及文件added、success、progress、error几个事件:

ref="uploader"

:options="options"

:autoStart="false"

@file-added="onFileAdded"

@file-success="onFileSuccess"

@file-progress="onFileProgress"

@file-error="onFileError"

class="uploader-app">

选择文件

文件列表

  • 暂无待上传文件

组件中的data部分:

data() {

return {

options: {

target: 'http://xxxxx/xx', // 目标上传 URL

chunkSize: '2048000', //分块大小

fileParameterName: 'file', //上传文件时文件的参数名,默认file

maxChunkRetries: 3, //最大自动失败重试上传次数

testChunks: t

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现上传文件断点续传和进度显示,可以使用Vue-Simple-Uploader这个插件。下面是一个使用Vue-Simple-Uploader实现上传文件断点续传和进度显示的示例: 首先,安装Vue-Simple-Uploader插件: ``` npm install vue-simple-uploader --save ``` 然后,在Vue组件中引入和使用Vue-Simple-Uploader插件: ```html <template> <div> <vue-simple-uploader ref="uploader" :multiple="false" :auto-upload="false" :chunk-size="chunkSize" :upload-url="uploadUrl" :headers="headers" :params="params" :with-credentials="withCredentials" @progress="onProgress" @chunk-success="onChunkSuccess" @success="onSuccess" @error="onError" > <button @click="uploadFile">上传文件</button> </vue-simple-uploader> </div> </template> <script> import VueSimpleUploader from 'vue-simple-uploader'; export default { components: { VueSimpleUploader, }, data() { return { chunkSize: 1024 * 1024, // 每个分片的大小 uploadUrl: '/upload', // 上传地址 headers: {}, // 请求头 params: {}, // 请求参数 withCredentials: false, // 发送跨域请求时是否携带cookie }; }, methods: { // 上传文件 uploadFile() { this.$refs.uploader.upload(); }, // 上传进度 onProgress(progress) { console.log(`上传进度:${progress}%`); }, // 分片上传成功 onChunkSuccess(chunkResponse, chunkUploadParams, successChunks, totalChunks) { console.log(`分片上传成功:${chunkResponse}`); }, // 上传成功 onSuccess(response, file, fileList) { console.log(`上传成功:${response}`); }, // 上传失败 onError(error, file, fileList) { console.log(`上传失败:${error}`); }, }, }; </script> ``` 在上面的示例中,我们通过设置Vue-Simple-Uploader的props来实现上传文件的一些配置,如每个分片的大小、上传地址、请求头、请求参数等。然后,我们通过调用`this.$refs.uploader.upload()`方法来触发文件上传。在上传过程中,Vue-Simple-Uploader会触发一些事件,如上传进度、分片上传成功、上传成功、上传失败等,我们可以通过监听这些事件来实现断点续传和进度显示的功能。 其中,`@progress`事件会在上传过程中定时触发,可以用来显示上传进度;`@chunk-success`事件会在每个分片上传成功后触发,可以用来记录已经上传分片;`@success`事件会在文件上传成功后触发,可以用来处理上传成功后的逻辑;`@error`事件会在上传失败后触发,可以用来处理上传失败后的逻辑。 需要注意的是,为了实现断点续传功能,我们需要在后端实现接收分片、合并分片等功能。具体实现方式可以参考Vue-Simple-Uploader的文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值