使用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 相关文章推荐
让GoogleCode的SVN下的HTML文件在FireFox下正常显示.
May 25 Javascript
Javascript 颜色渐变效果的实现代码
Oct 01 Javascript
jQuery防止click双击多次提交及传递动态函数或多参数
Apr 02 Javascript
js实现仿百度汽车频道选择汽车图片展示实例
May 06 Javascript
angularjs实现首页轮播图效果
Apr 14 Javascript
es7学习教程之Decorators(修饰器)详解
Jul 21 Javascript
jquery tmpl模板(实例讲解)
Sep 02 jQuery
基于substring()和substr()的使用以及区别(实例讲解)
Dec 28 Javascript
JavaScript事件对象深入详解
Dec 30 Javascript
如何封装了一个vue移动端下拉加载下一页数据的组件
Jan 06 Javascript
微信小程序框架的页面布局代码
Aug 17 Javascript
JavaScript进制转换实现方法解析
Jan 18 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/12/22 PHP
PHP有序表查找之插值查找算法示例
2018/02/10 PHP
在Laravel 的 Blade 模版中实现定义变量
2019/10/14 PHP
javascript 伪数组实现方法
2010/10/11 Javascript
ie下动态加态js文件的方法
2011/09/13 Javascript
html+javascript实现可拖动可提交的弹出层对话框效果
2013/08/05 Javascript
Eclipse下jQuery文件报错出现错误提示红叉
2014/01/13 Javascript
使用CSS样式position:fixed水平滚动的方法
2014/02/19 Javascript
Javascript基础教程之argument 详解
2015/01/18 Javascript
Node.js 学习笔记之简介、安装及配置
2015/03/03 Javascript
jQuery仿gmail实现fixed布局的方法
2015/05/27 Javascript
nodejs爬虫抓取数据乱码问题总结
2015/07/03 NodeJs
jQuery实现图片预加载效果
2015/11/27 Javascript
详解JavaScript基本类型和引用类型
2015/12/09 Javascript
ionic由于使用了header和subheader导致被遮挡的问题的两种解决方法
2016/09/22 Javascript
Jqprint实现页面打印
2017/01/06 Javascript
jQuery基于cookie实现换肤功能实例
2017/10/14 jQuery
基于jQuery中ajax的相关方法汇总(必看篇)
2017/11/08 jQuery
微信小程序实现watch监听
2020/06/04 Javascript
解决vue项目本地启动时无法携带cookie的问题
2021/02/06 Vue.js
[03:30]完美盛典趣味短片 CSGO2019年度名场面
2019/12/07 DOTA
netbeans7安装python插件的方法图解
2013/12/24 Python
详解Python中for循环的使用方法
2015/05/14 Python
Windows下Python的Django框架环境部署及应用编写入门
2016/03/10 Python
python操作excel的包(openpyxl、xlsxwriter)
2018/06/11 Python
Python使用os.listdir()和os.walk()获取文件路径与文件下所有目录的方法
2019/04/01 Python
Python Web框架之Django框架文件上传功能详解
2019/08/16 Python
python3.5 cv2 获取视频特定帧生成jpg图片
2019/08/28 Python
python实现修改固定模式的字符串内容操作示例
2019/12/30 Python
解决pycharm修改代码后第一次运行不生效的问题
2021/02/06 Python
Html5 Geolocation获取地理位置信息实例
2016/12/09 HTML / CSS
html5+css如何实现中间大两头小的轮播效果
2018/12/06 HTML / CSS
瑞典香水、须后水和美容产品购物网站:Parfym-Klick.se
2019/12/29 全球购物
幼师个人总结范文
2015/02/28 职场文书
优秀乡村医生事迹材料(2016精选版)
2016/02/29 职场文书
BCL经典机 SONY ICF-5900W电路分析
2022/04/24 无线电