vue获取上传进度_vue,webuploader实现文件分片上传,并显示上传进度
1.效果图
2.上传文件时,如果使用普通上传,则需要上传一个文件完成后才能上传下一个文件,如果文件很大时,可能会造成浏览器无响应,如果采用分片上传方式,将一个大文件分割成多块,并发上传,极大地提高大文件的上传速度。
当网络问题导致传输错误时,只需要重传出错分片,而不是整个文件。另外分片传输能够更加实时的跟踪上传进度。
在项目中引入webuploader
第一步:引入第三方js和css
注意:也可通过安装依赖的方式,引入jquery插件
npm install jquery --save
第二步:封装Vue组件
export default{
name: 'vue-upload',
props: {
accept: {
type: Object,
default: null,
},
// 上传地址
url: {
type: String,
default: uploadUrl,
},
// 上传最大数量 默认为100
fileNumLimit: {
type: Number,
default: 1,
},
// 大小限制 默认2M
fileSingleSizeLimit: {
type: Number,
default: 1024*1024*1024*10,
},
// 上传时传给后端的参数,一般为token,key等
formData: {
type: Object,
default: null
},
// 生成formData中文件的key,下面只是个例子,具体哪种形式和后端商议
keyGenerator: {
type: Function,
default(file) {
constcurrentTime = newDate().getTime();
constkey = `${currentTime}.${file.name}`;
returnkey;
},
},
multiple: {
type: Boolean,
default: false,
},
// 上传按钮ID
uploadButton: {
type: String,
default: '',
},
},
data() {
return{
uploader: null
};
},
mounted() {
this.initWebUpload();
},
methods: {
initWebUpload() {
this.uploader = WebUploader.create({
auto: false, // 选完文件后,是否自动上传
// swf: '/static/lib/webuploader/Uploader.swf', // swf文件路径
server: this.url, // 文件接收服务端
pick: {
id: this.uploadButton, // 选择文件的按钮
multiple: this.multiple, // 是否多文件上传 默认false
label: '',
},
accept: this.getAccept(), // 允许选择文件格式。
threads:10,
fileNumLimit: this.fileNumLimit, // 限制上传个数
fileSingleSizeLimit: this.fileSingleSizeLimit, // 限制单个上传图片的大小
formData: this.formData, // 上传所需参数
chunked: true, //分片上传
chunkSize: 1024*1024*10, //分片大小
duplicate: true, // 重复上传
});
// 当有文件被添加进队列的时候,添加到页面预览
this.uploader.on('fileQueued', (file) => {
this.$emit('fileChange', file);
});
this.uploader.on('beforeFileQueued', (file) => {
this.$emit('beforeFileQueued', file);
});
this.uploader.on('uploadStart', (file) => {
console.log( this.keyGenerator)
// 在这里可以准备好formData的数据
// this.uploader.options.formData.key = this.keyGenerator(file);
});
// 文件上传过程中创建进度条实时显示。
this.uploader.on('uploadProgress', (file, percentage) => {
});
this.uploader.on('uploadSuccess', (file, response) => {
var_this=this;
this.$emit('success', file, response);
});
this.uploader.on('uploadError', (file, reason) => {
console.log(reason);
this.$emit('uploadsError', file, reason);
for(vari = 0; i < this.uploader.getFiles().length; i++) {
this.uploader.removeFile(this.uploader.getFiles()[i]);
}
this.uploader.reset();
this.initWebUpload();//初始化
});
this.uploader.on('error', (type) => {
let errorMessage = '';
if(type === 'F_EXCEED_SIZE') {
errorMessage = `文件大小不能超过${this.fileSingleSizeLimit / (1024 * 1000)}M`;
} else if(type === 'Q_EXCEED_NUM_LIMIT') {
errorMessage = '文件上传已达到最大上限数';
} else{
errorMessage = `上传出错!请检查后重新上传!错误代码${type}`;
}
console.error(errorMessage);
this.$emit('error', errorMessage);
});
this.uploader.on('uploadComplete', (file, response) => {
this.$emit('complete', file, response);
});
this.uploader.on('stopUpload', () => {
var_this=this;
_this.uploader.reset();
_this.initWebUpload();//初始化
});
this.uploader.on('uploadFinished', () => {
console.log(_this.uploader.getFiles())
});
},
getStats:function(){
return this.uploader.getStats();
},
upload(file,data) {
this.uploader.options.formData=data;//传参数
this.uploader.upload(file,data);
},
stop(file) {
this.uploader.stop(file);
},
reset(){
this.uploader.reset();
},
refresh(){
this.uploader.refresh();
},
// 取消并中断文件上传
cancelFile(file) {
this.uploader.cancelFile(file);
},
// 在队列中移除文件
removeFile(file, bool) {
this.uploader.removeFile(file, bool);
},
getFiles() {
return this.uploader.getFiles();
},
getAccept() {
return{
title: 'Videos',
extensions: 'mp4,flv,avi,wmv,ogg,rmvb,mts',
mimeTypes: '.mp4,.flv,.avi,.wmv,.ogg,.rmvb,.mts'
};
},
},
};
第三步 把第二步组件引到你的页面中,使用组件,实现分片上传
vue获取上传进度_vue,webuploader实现文件分片上传,并显示上传进度相关推荐
- linux下查看进度命令,在Linux系统中使用Coreutils Viewer显示命令运行进度
Coreutils Viewer(cv)是一个简单的程序,它可以用于显示任何核心组件命令(如:cp.mv.dd.tar.gzip.gunzip.cat.grep.fgrep.egrep.cut.sor ...
- axios 上传文件_聚是一团火散作满天星,前端Vue.js+elementUI结合后端FastAPI实现大文件分片上传...
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_175 分片上传并不是什么新概念,尤其是大文件传输的处理中经常会被使用,在之前的一篇文章里:python花式读取大文件(10g/50 ...
- html上传文件_.NET基于WebUploader大文件分片上传、断网续传、秒传
(给DotNet加星标,提升.Net技能) 转自:学习中的苦与乐 cnblogs.com/xiongze520/p/10412693.html 现在的项目开发基本上都用到了上传文件功能,或图片,或文档 ...
- vue获取微信登陆权限_Vue获取微信JSSDK授权,以及微信分享
场景 Vue获取JSSDK授权以便在微信浏览器,或者嵌在小程序里面做些小事情,如朋友/朋友圈分享,微信支付,图片上传下载等 步骤一 配置安全域名: 在微信公众平台对应的公众号设置里面配上相应的JS接口 ...
- vue 获取dom子元素_vue获取dom元素注意事项
mounted(){ setTimeout(()=>{ this.contentToggle(); },1000) }, methods:{ contentToggle(){ console.l ...
- arduino上传项目总是出错,串口通信或TX/RX显示上传项目出错
今天摸arduino的时候又遇到了这个问题,突然想起多年以前的坑: 如果项目中需要使用TX,RX口,那么在上传的时候一定不能把这两个插上,否则会报错,而且是各种奇怪的错误,典型就是会显示:项目上传出错 ...
- php分页上一页下一页判断,一个分页函数:显示“上一页下一页”等
'************************************************** '函数名:ShowPage '作 用:显示"上一页 下一页"等信息 '参 数 ...
- vue获取编辑器纯文字_vue中使用富文本编辑器
前端使用富文本编辑器的插件有很多,今天献上wangeditor的使用教程,教你如何在vue中使用富文本编辑器 wangeditor是一个萌新富文本编辑器,基于js和css,重点在于它轻量,如果你需要的 ...
- vue 获取用户位置 高德_Vue使用高德地图
主要是想记录一下使用高德地图地位以及标记当前位置,搜索位置的过程. 创建Vue项目的流程 引入高德地图 在index.html 的head中引入代码. 复制代码 设置容器,初始化地图. .contai ...
最新文章
- Redis的字典扩容与ConcurrentHashMap的扩容策略比较
- wifi的基础知识及原理1
- 强大的NVAE:以后再也不能说VAE生成的图像模糊了
- error2---BeginPath和EndPath之间的TextOut无法显示
- 全国一等奖,F题:智能送药小车。
- java hanlp分词_Hanlp分词实例:Java实现TFIDF算法
- [深度学习] PyTorch-BigGraph 使用
- 常用并发工具类(线程池)
- 生信老司机以中心法则为主线讲解组学技术的应用和生信分析心得—限时免费
- 波音正在对737 Max进行软件升级 改善飞行员培训计划
- HttpServlet请求重定向
- mysql force Index 强制索引[转]
- java retainall_Java Set retainAll()用法及代码示例
- CodeBlock:Process terminated with status1073741510
- 怎么查期刊是核心、是EI,还是SCI,或者说有哪些不是吧?
- 游戏后台架构发展历史及展望
- win10系统重装(无需u盘)(无需下载第三方软件)(绝对纯净版)(全网最简)
- 从软件工程的角度写机器学习1——机器学习的思想
- 《水经注地图服务》图层管理介绍
- python实现秒杀系统_双十一买买买,教你用Python实现秒杀系统