使用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 无符号右移赋值操作
Apr 17 Javascript
jquery实现手机发送验证码的倒计时代码
Feb 12 Javascript
Javascript 实现图片无缝滚动
Dec 19 Javascript
详解Node.Js如何处理post数据
Sep 19 Javascript
jquery easyui validatebox remote的使用详解
Nov 09 Javascript
ztree简介_动力节点Java学院整理
Jul 19 Javascript
详谈JS中数组的迭代方法和归并方法
Aug 11 Javascript
JS加密插件CryptoJS实现的DES加密示例
Aug 16 Javascript
Vue 应用中结合vux使用微信 jssdk的方法
Aug 28 Javascript
详解50行代码,Node爬虫练手项目
Apr 22 Javascript
如何基于vue-cli3.0构建功能完善的移动端架子
Apr 24 Javascript
利用JavaScript模拟京东按键输入功能
Dec 01 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实现小型站点广告管理
2006/10/09 PHP
php生成随机颜色的方法
2014/11/13 PHP
PHP进程同步代码实例
2015/02/12 PHP
php使用timthumb生成缩略图的方法
2016/01/22 PHP
golang与php实现计算两个经纬度之间距离的方法
2016/07/22 PHP
php实现将HTML页面转换成word并且保存的方法
2016/10/14 PHP
PHP实现防止表单重复提交功能【基于token验证】
2018/05/24 PHP
PHP时间类完整代码实例
2021/02/26 PHP
javascript中对对层的控制
2006/12/29 Javascript
dojo 之基础篇(二)之从服务器读取数据
2007/03/24 Javascript
JavaScript中Math对象使用说明
2008/01/16 Javascript
动态的绑定事件addEventListener方法的使用
2014/01/24 Javascript
javascript学习笔记(五)原型和原型链详解
2014/10/08 Javascript
Bootstrap轮播加上css3动画,炫酷到底!
2015/12/22 Javascript
JS中动态创建元素的三种方法总结(推荐)
2016/10/20 Javascript
如何用JS/HTML将时间戳转换为“xx天前”的形式
2017/02/06 Javascript
AngularJS  ng-repeat遍历输出的用法
2017/06/19 Javascript
js用类封装pop弹窗组件
2017/10/08 Javascript
mocha的时序规则讲解
2019/02/16 Javascript
Vue中jsx不完全应用指南小结
2019/11/01 Javascript
在weex中愉快的使用scss的方法步骤
2020/01/02 Javascript
[01:46]DOTA2上海特锦赛小组赛英文解说KotlGuy采访
2016/02/27 DOTA
python分割和拼接字符串
2013/11/01 Python
用Python编写一个简单的Lisp解释器的教程
2015/04/03 Python
Python3 修改默认环境的方法
2019/02/16 Python
python中的print()输出
2019/04/12 Python
python Pillow图像处理方法汇总
2019/10/16 Python
使用python操作lmdb对数据读取的实例
2020/12/11 Python
纯CSS3实现给头像加个光芒四射且旋转的背景动画效果
2014/05/07 HTML / CSS
使用iframe+postMessage实现页面跨域通信的示例代码
2020/01/14 HTML / CSS
canvas绘制太极图的实现示例
2020/04/29 HTML / CSS
俄罗斯名牌服装网上商店:UNIQUE FABRIC
2019/07/25 全球购物
Java平台和其他软件平台有什么不同
2015/06/05 面试题
太太口服液广告词
2014/03/20 职场文书
保险公司客户经理岗位职责
2015/04/09 职场文书
java开发双人五子棋游戏
2022/05/06 Java/Android