使用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实现的像java、c#之类的sleep暂停的函数代码
Mar 04 Javascript
js编写trim()函数及正则表达式的运用
Oct 24 Javascript
浅析return false的正确使用
Nov 04 Javascript
javascript中match函数的用法小结
Feb 08 Javascript
多种方法实现load加载完成后把图片一次性显示出来
Feb 19 Javascript
JS判断变量是否为空判断是否null
Jul 25 Javascript
JQuery设置获取下拉菜单某个选项的值(比较全)
Aug 05 Javascript
实现前后端数据交互方法汇总
Apr 07 Javascript
AngularJS基础知识笔记之表格
May 10 Javascript
jQuery 利用$.ajax 时获取原生XMLHttpRequest 对象的方法
Aug 25 Javascript
Javascript查看大图功能代码实现
May 07 Javascript
详解JSON.stringify()的5个秘密特性
May 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
请离开include_once和require_once
2013/07/18 PHP
php建立Ftp连接的方法
2015/03/07 PHP
php获取系统变量方法小结
2015/05/29 PHP
PHP实现接收二进制流转换成图片的方法
2017/01/10 PHP
Alliance vs AM BO3 第二场2.13
2021/03/10 DOTA
jQuery基础框架浅入剖析
2012/12/27 Javascript
php,js,css字符串截取的办法集锦
2014/09/26 Javascript
JavaScript三元运算符的多种使用技巧
2015/04/16 Javascript
javascript设计简单的秒表计时器
2020/09/05 Javascript
jquery插件ajaxupload实现文件上传操作
2015/12/09 Javascript
AngularJS 简单应用实例
2016/07/28 Javascript
基于Vue实现tab栏切换内容不断实时刷新数据功能
2017/04/13 Javascript
BootStrap Table前台和后台分页对JSON格式的要求
2017/06/28 Javascript
vue实现点击图片放大效果
2017/08/15 Javascript
seajs中模块依赖的加载处理实例分析
2017/10/10 Javascript
微信小程序日历组件使用方法详解
2018/12/29 Javascript
原生JS使用Canvas实现拖拽式绘图功能
2019/06/05 Javascript
js实现上传图片并显示图片名称
2019/12/18 Javascript
解决vue单页面应用打包后相对路径、绝对路径相关问题
2020/08/14 Javascript
vue Treeselect下拉树只能选择第N级元素实现代码
2020/08/31 Javascript
Python实现的二维码生成小软件
2014/07/11 Python
微信跳一跳自动运行python脚本
2018/01/08 Python
基于python实现KNN分类算法
2020/04/23 Python
Python使用LDAP做用户认证的方法
2019/06/20 Python
一行python实现树形结构的方法
2019/08/09 Python
Python之指数与E记法的区别详解
2019/11/21 Python
pandas DataFrame运算的实现
2020/06/14 Python
用Python开发app后端有优势吗
2020/06/29 Python
详解tensorflow之过拟合问题实战
2020/11/01 Python
欧洲最大的美妆零售网站:Feelunique
2017/01/14 全球购物
英国打印机墨水和碳粉商店:Printerinks
2017/06/30 全球购物
无谷物狗粮:Pooch & Mutt
2018/05/23 全球购物
美国尼曼百货官网:Neiman Marcus
2019/09/05 全球购物
《陈涉世家》教学反思
2014/04/12 职场文书
写给父母的感谢信
2015/01/22 职场文书
2015年法务工作总结范文
2015/05/23 职场文书