视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
使用axios如何实现上传图片带有进度条功能
2020-11-27 19:36:32 责编:小采
文档


Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。这篇文章主要介绍了使用axios实现上传图片进度条,需要的朋友可以参考下

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">
 <p slot="end">{{Math.ceil(precent)}}%</p>
 </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了,根据自己个性化定制来实现你那完美的需求...

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

在ionic3中如何实现随机布局瀑布流

在React项目中如何使用Redux(详细教程)

在JavaScript中如何实现数值自动增加

使用Swiper如何实现分页器使用

在Vue组件通信中如何使用Bus

在Angular中如何实现敏感文字提示

在Angular中如何实现隐藏显示

下载本文
显示全文
专题