使用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 获取LI里的内容
Dec 17 Javascript
js onpropertychange输入框 事件获取属性
Mar 26 Javascript
js 实现日期灵活格式化的小例子
Jul 14 Javascript
JavaScript实现获取某个元素相邻兄弟节点的prev与next方法
Jan 25 Javascript
jQuery树插件zTree使用方法详解
May 02 jQuery
javascript计算渐变颜色的实例
Sep 22 Javascript
微信小程序之批量上传并压缩图片的实例代码
Jul 05 Javascript
vue系列之requireJs中引入vue-router的方法
Jul 18 Javascript
微信公众号生成新浪短网址的实现(快速生成)
Aug 18 Javascript
Vue实现PC端靠边悬浮球的代码
May 09 Javascript
js编写简易的计算器
Jul 29 Javascript
jQuery实现鼠标拖动图片功能
Mar 04 jQuery
详解使用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
php5.3 goto函数介绍和示例
2014/03/21 PHP
PHP命名空间(namespace)的动态访问及使用技巧
2014/08/18 PHP
php使用gzip压缩传输js和css文件的方法
2015/07/29 PHP
详解php的socket通信
2015/08/11 PHP
PHP会员找回密码功能的简单实现
2016/09/05 PHP
thinkPHP通用控制器实现方法示例
2017/11/23 PHP
thinkphp5框架实现的自定义扩展类操作示例
2019/05/16 PHP
js操作时间(年-月-日 时-分-秒 星期几)
2010/06/20 Javascript
侧栏跟随滚动的简单实现代码
2013/03/18 Javascript
使用js在页面中绘制表格核心代码
2013/09/16 Javascript
checkbox全选所涉及到的知识点介绍
2013/12/31 Javascript
详解JavaScript基于面向对象之创建对象(1)
2015/12/10 Javascript
jQuery树形控件zTree使用小结
2016/08/02 Javascript
AngularJS 与Bootstrap实现表格分页实例代码
2016/10/14 Javascript
JavaScript中在光标处插入添加文本标签节点的详细方法
2017/03/22 Javascript
基于node下的http小爬虫的示例代码
2018/01/11 Javascript
超详细小程序定位地图模块全系列开发教学
2020/11/24 Javascript
[02:57]DOTA2亚洲邀请赛小组赛第四日 赛事回顾
2015/02/02 DOTA
[01:08:17]2018DOTA2亚洲邀请赛3月29日 小组赛B组 EG VS VGJ.T
2018/03/30 DOTA
[04:03][TI9趣味短片] 小鸽子茶话会
2019/08/20 DOTA
Python类的基础入门知识
2008/11/24 Python
Python使用QQ邮箱发送Email的方法实例
2017/02/09 Python
pyenv命令管理多个Python版本
2017/03/26 Python
Python设计模式之代理模式实例详解
2019/01/19 Python
python3.6、opencv安装环境搭建过程(图文教程)
2019/11/05 Python
python pyenv多版本管理工具的使用
2019/12/23 Python
Python concurrent.futures模块使用实例
2019/12/24 Python
详解如何在PyCharm控制台中输出彩色文字和背景
2020/08/17 Python
VELTRA台湾:世界自由行专家
2017/08/15 全球购物
英国老牌潮鞋店:Offspring
2019/08/19 全球购物
农田水利实习自我鉴定
2013/09/19 职场文书
CNC数控操作工岗位职责
2013/11/19 职场文书
员工保密承诺书
2014/05/28 职场文书
党支部书记四风问题整改措施
2014/09/24 职场文书
2019年朋友圈经典励志语录50条
2019/07/05 职场文书
详解MySql中InnoDB存储引擎中的各种锁
2022/02/12 MySQL