使用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 相关文章推荐
jquery 插件 web2.0分格的分页脚本,可用于ajax无刷新分页
Dec 25 Javascript
JavaScript小技巧 2.5 则
Sep 12 Javascript
IE6/7/8中Option元素未设value时Select将获取空字符串
Apr 07 Javascript
js 上下左右键控制焦点(示例代码)
Dec 14 Javascript
jQuery实现html元素拖拽
Jul 21 Javascript
cocos2dx骨骼动画Armature源码剖析(三)
Sep 08 Javascript
学习JavaScript设计模式(单例模式)
Nov 26 Javascript
javascript使用btoa和atob来进行Base64转码和解码
Mar 20 Javascript
微信小程序的分类页面制作
Jun 27 Javascript
总结javascript三元运算符知识点
Sep 28 Javascript
百度小程序自定义通用toast组件
Jul 17 Javascript
Layui数据表格之单元格编辑方式
Oct 26 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实现的日历程序
2015/06/18 PHP
PHP程序中的文件锁、互斥锁、读写锁使用技巧解析
2016/03/21 PHP
PHP命名空间和自动加载类
2016/04/03 PHP
php插入含有特殊符号数据的处理方法
2016/11/24 PHP
PHP中非常有用却鲜有人知的函数集锦
2019/08/17 PHP
javascript中的float运算精度实例分析
2010/08/21 Javascript
用XMLDOM和ADODB.Stream实现base64编码解码实现代码
2010/11/28 Javascript
javascript教程:关于if简写语句优化的方法
2014/05/17 Javascript
jQuery中的height innerHeight outerHeight区别示例介绍
2014/06/15 Javascript
jqueryUI里拖拽排序示例分析
2015/02/26 Javascript
Javascript简单改变表单元素背景的方法
2015/07/15 Javascript
javascript实现不同颜色Tab标签切换效果
2016/04/27 Javascript
在Docker快速部署Node.js应用的详细步骤
2016/09/02 Javascript
js Canvas绘制圆形时钟教程
2017/02/06 Javascript
浅谈js中用$(#ID)来作为选择器的问题(id重复的时候)
2017/02/14 Javascript
深究AngularJS中ng-drag、ng-drop的用法
2017/06/12 Javascript
AngularJS select设置默认值的实现方法
2017/08/25 Javascript
你应该了解的JavaScript Array.map()五种用途小结
2018/11/14 Javascript
Node.js如何对SQLite的async/await封装详解
2019/02/14 Javascript
VUE前后端学习tab写法实例
2019/08/06 Javascript
vue组件创建的三种方式小结
2020/02/03 Javascript
python构建深度神经网络(续)
2018/03/10 Python
python TKinter获取文本框内容的方法
2018/10/11 Python
浅析python参数的知识点
2018/12/10 Python
python学习--使用QQ邮箱发送邮件代码实例
2019/04/16 Python
Django url 路由匹配过程详解
2021/01/22 Python
美国顶级户外凉鞋品牌:Chacos
2017/03/27 全球购物
英国太阳镜品牌:Taylor Morris Eyewear
2018/04/18 全球购物
The Outnet亚太地区:折扣设计师时装店
2019/12/05 全球购物
PHP中如何创建和修改数组
2012/05/02 面试题
大学生四个方面的自我评价
2013/09/19 职场文书
《北大荒的秋天》教学反思
2014/04/14 职场文书
正风肃纪查摆剖析材料
2014/10/10 职场文书
财务部岗位职责
2015/02/03 职场文书
2016七夕情人节寄语
2015/12/04 职场文书
银行求职信范文
2019/05/13 职场文书