使用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 相关文章推荐
syntaxhighlighter 使用方法
Jul 02 Javascript
基于JQuery的多标签实现代码
Sep 19 Javascript
让浏览器DOM元素最后加载的js方法
Jul 29 Javascript
用原生JS获取CLASS对象(很简单实用)
Oct 15 Javascript
Node.js 去掉种子(torrent)文件里的邪恶信息
Mar 27 Javascript
vue项目tween方法实现返回顶部的示例代码
Mar 02 Javascript
利用hasOwnProperty给数组去重的面试题分享
Nov 05 Javascript
webpack4.0+vue2.0利用批处理生成前端单页或多页应用的方法
Jun 28 Javascript
更优雅的微信小程序骨架屏实现详解
Aug 07 Javascript
vue 使用外部JS与调用原生API操作示例
Dec 02 Javascript
微信小程序激励式视频广告组件使用详解
Dec 06 Javascript
JS实现购物车基本功能
Nov 08 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 curl_setopt()函数实例代码与参数分析
2011/06/02 PHP
简单实现限定phpmyadmin访问ip的方法
2013/03/05 PHP
php实现通用的信用卡验证类
2015/03/24 PHP
Yii使用Captcha验证码的方法
2015/12/28 PHP
CodeIgniter配置之SESSION用法实例分析
2016/01/19 PHP
php+mysql+ajax 局部刷新点赞/取消点赞功能(每个账号只点赞一次)
2020/07/24 PHP
PHP编程一定要改掉的5个不良习惯
2020/09/18 PHP
用js生产批量批处理执行命令
2008/07/28 Javascript
jquery validate使用攻略 第四步
2010/07/01 Javascript
JavaScript鼠标事件,点击鼠标右键,弹出div的简单实例
2016/08/03 Javascript
微信小程序 图片边框解决方法
2017/01/16 Javascript
angular4自定义表单控件[(ngModel)]的实现
2018/11/23 Javascript
详解vue挂载到dom上会发生什么
2019/01/20 Javascript
vue 源码解析之虚拟Dom-render
2019/08/26 Javascript
Python读取mp3中ID3信息的方法
2015/03/05 Python
Python中的super()方法使用简介
2015/08/14 Python
Python数据类型详解(二)列表
2016/05/08 Python
Python网络爬虫出现乱码问题的解决方法
2017/01/05 Python
TensorFlow深度学习之卷积神经网络CNN
2018/03/09 Python
python3中获取文件当前绝对路径的两种方法
2018/04/26 Python
python爬虫实例详解
2018/06/19 Python
Python cv2 图像自适应灰度直方图均衡化处理方法
2018/12/07 Python
Python3中exp()函数用法分析
2019/02/19 Python
利用python list完成最简单的DB连接池方法
2019/08/09 Python
windows下Pycharm安装opencv的多种方法
2020/03/05 Python
django rest framework serializers序列化实例
2020/05/13 Python
MIXIT官网:俄罗斯最大的化妆品公司之一
2020/01/25 全球购物
澳大利亚网上书店:QBD
2021/01/09 全球购物
农民入党思想汇报
2014/01/03 职场文书
《十六年前的回忆》教学反思
2014/02/14 职场文书
绩效工资实施方案
2014/03/15 职场文书
2014年社团工作总结范文
2014/11/27 职场文书
慰问信的写作格式及范文!
2019/06/24 职场文书
MySQL安装后默认自带数据库的作用详解
2021/04/27 MySQL
vue+spring boot实现校验码功能
2021/05/27 Vue.js
教你部署vue项目到docker
2022/04/05 Vue.js