使用axios实现上传图片进度条功能


Posted in Javascript onDecember 21, 2017

Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。

Features

从浏览器中创建 XMLHttpRequests

从 node.js 创建 http 请求

支持 Promise API

拦截请求和响应

转换请求数据和响应数据

取消请求

自动转换 JSON 数据

客户端支持防御 XSRF

下面给大家介绍使用axios实现上传图片进度条功能,具体内容介绍如下所示:

 在最近做的项目中,一个手机页面最多要上传几十张图片,虽然对照片做了压缩处理,不过最后还是很大,如果网卡的话,上传的时间很差,如果一直在loading的话,用户都不知道什自己上传了多少,为了更直观的展现上传的进度,最好显示进度条,和显示上传的百分比;

项目用的是vuejs框架,mint-ui做为ui框架;请求的是vue官方推荐的axios(真的很强大);在axios官方介绍了使用原生上传处理进度事件(具体参考这里,这里有中文的axios官方介绍):

onUploadProgress: function (progressEvent) {
  // 对原生进度事件的处理
 },

因为使用vuejs,对于接口的数据请求,为方便管理,需要统一的管理。如果放在每个组件里,不方便日后的维护和管理;在reqwest.js文件里,定义了一个uploadPhoto方法,该方法有三个参数,分别是参数,和两个回调函数,参数就是我们要上传图片的需要的额参数;而第一个回调函数,是获取上传进度包含的数据,第二回调是获取上传成功失败,后台返回的数据;来进行页面的下一步操作。

uploadPhoto(payload,callback1,callback2){
    axios({
      url:BASE_URL + '/handler/material/upload',
      method:'post',
      onUploadProgress:function(progressEvent){ //原生获取上传进度的事件
        if(progressEvent.lengthComputable){
          //属性lengthComputable主要表明总共需要完成的工作量和已经完成的工作是否可以被测量
          //如果lengthComputable为false,就获取不到progressEvent.total和progressEvent.loaded
          callback1(progressEvent);
        }
      },
      data:payload
    }).then(res =>{
      callback2(res.data);
    }).then(error =>{
      console.log(error)
    })
  }

使用mint-ui组件里的Progress组件,在data的方法里定义该组件里的变量precent,该变量是number类型,在定义的时候,注意; 

<mt-progress :value="precent" :bar-height="10">
   <div slot="end">{{Math.ceil(precent)}}%</div>
  </mt-progress>

把reqwest.js 这个文件import 进来,获取到uploadPhoto这个方法,根据获取上传的进度,使用$nextTick 这个属性,实时的更新的页面上。

const _this = this;
API.uploadPhoto(fd,(res) =>{
 let loaded = res.loaded,
   total = res.total;
   _this.$nextTick(() =>{
    _this.precent = (loaded/total) * 100;
   })
},(res) =>{
  if(res.code === '200'){
    MessageBox.alert('图片上传成功').then(action => {
     console.log('ok');
    });
  }
})

根据上面的方法基本实现图片的上传进度和百分比的显示,剩下的就是ui了,根据自己个性化定制来实现你那完美的需求...

总结

以上所述是小编给大家介绍的使用axios实现上传图片进度条功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
JavaScript 继承使用分析
May 12 Javascript
有关于eclipse配置spket需要注意的一些地方
Apr 07 Javascript
jquery设置控件位置的方法
Aug 21 Javascript
使用jQuery实现input数值增量和减量的方法
Jan 24 Javascript
JavaScript创建闭包的两种方式的优劣与区别分析
Jun 22 Javascript
js+css实现文字散开重组动画特效代码分享
Aug 21 Javascript
jquery动态添加文本并获取值的方法
Oct 12 Javascript
headjs实现网站并行加载但顺序执行JS
Nov 29 Javascript
jQuery插件echarts实现的多柱子柱状图效果示例【附demo源码下载】
Mar 04 Javascript
JavaScript体验异步更好的解决办法
Jan 08 Javascript
微信小程序实现星级评分和展示
Jul 05 Javascript
JavaScript中this的全面解析及常见实例
May 14 Javascript
详解使用webpack构建多页面应用
Dec 21 #Javascript
使用ajax的post同步执行(实现方法)
Dec 21 #Javascript
jQuery Validate插件ajax方式验证输入值的实例
Dec 21 #jQuery
原生js+cookie实现购物车功能的方法分析
Dec 21 #Javascript
JS实现去除数组中重复json的方法示例
Dec 21 #Javascript
解析vue中的$mount
Dec 21 #Javascript
vue中使用refs定位dom出现undefined的解决方法
Dec 21 #Javascript
You might like
PHP中extract()函数的定义和用法
2012/08/17 PHP
PHP 数组黑名单/白名单实例代码详解
2019/06/04 PHP
PHP中类与对象功能、用法实例解读
2020/03/27 PHP
javascript 一段左右两边随屏滚动的代码
2009/06/18 Javascript
AJAX的跨域与JSONP(为文章自动添加短址的功能)
2010/01/17 Javascript
jquery动画2.元素坐标动画效果(创建一个图片走廊)
2012/08/24 Javascript
jquery 关于event.target使用的几点说明介绍
2013/04/26 Javascript
jQuery获得内容和属性示例代码
2014/01/16 Javascript
详解JavaScript的策略模式编程
2015/06/24 Javascript
jQuery幻灯片特效代码分享--鼠标滑过按钮时切换(2)
2020/11/18 Javascript
jQuery 生成svg矢量二维码
2016/08/09 Javascript
js style.display=block显示布局错乱问题的解决方法
2016/09/21 Javascript
js实现4个方向滚动的球
2017/03/06 Javascript
详解Vue使用命令行搭建单页面应用
2017/05/24 Javascript
Angular 4依赖注入学习教程之InjectToken的使用(八)
2017/06/04 Javascript
JS库particles.js创建超炫背景粒子插件(附源码下载)
2017/09/13 Javascript
layui中layer前端组件实现图片显示功能的方法分析
2017/10/13 Javascript
基于jQuery实现的设置文本区域的光标位置
2018/06/15 jQuery
javascript中join方法实例讲解
2019/02/21 Javascript
nodejs使用async模块同步执行的方法
2019/03/02 NodeJs
判断“命令按钮”是否被鼠标单击详解
2019/07/31 Javascript
Vue extend的基本用法(实例详解)
2019/12/09 Javascript
[46:55]完美世界DOTA2联赛决赛 FTD vs Phoenix 第三场 11.08
2020/11/11 DOTA
python中os操作文件及文件路径实例汇总
2015/01/15 Python
python实现读取命令行参数的方法
2015/05/22 Python
python引入导入自定义模块和外部文件的实例
2017/07/24 Python
Python lambda表达式filter、map、reduce函数用法解析
2019/09/11 Python
python 读取串口数据的示例
2020/11/09 Python
什么是Linux虚拟文件系统VFS
2012/01/31 面试题
党课学习思想汇报
2014/01/02 职场文书
一份创业计划书范文
2014/02/08 职场文书
质量安全标语
2014/06/07 职场文书
法人委托书范本格式
2014/09/15 职场文书
初中体育教学随笔
2015/08/15 职场文书
2019奶茶店创业计划书范本,值得你借鉴
2019/08/14 职场文书
RPM包方式安装Oracle21c的方法详解
2021/08/23 Oracle