vue使用axios实现文件上传进度的实时更新详解


Posted in Javascript onDecember 20, 2017

axios 简介

axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端,它本身具有以下特征:

  • 从浏览器中创建 XMLHttpRequest
  • 从 node.js 发出 http 请求
  • 支持 Promise API
  • 拦截请求和响应
  • 转换请求和响应数据
  • 取消请求
  • 自动转换JSON数据
  • 客户端支持防止 CSRF/XSRF

引入方式:

$ npm install axios
//使用淘宝源
$ cnpm install axios
//或者使用cdn:
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

安装其他插件的时候,可以直接在 main.js 中引入并使用 Vue.use()来注册,但是 axios并不是vue插件,所以不能 使用Vue.use() ,所以只能在每个需要发送请求的组件中即时引入。

为了解决这个问题,我们在引入 axios 之后,通过修改原型链,来更方便的使用。

//main.js

import axios from 'axios'
Vue.prototype.$http = axios

在 main.js 中添加了这两行代码之后,就能直接在组件的 methods 中使用 $http命令

methods: {
postData () {
this.$http({
method: 'post',
url: '/user',
data: {
name: 'xiaoming',
info: '12'
}
})
}

更多的基础知识大家可以参考这篇文章:https://3water.com/article/110324.htm

vue使用axios实现文件上传进度实时更新

XHR二级增加了progress事件,我们可以据此在浏览器接收新数据期间添加实时数据进度条,从而使得交互更加友好

vue模板

<div class="progress" @click="upload"
   :style="{backgroundImage:'linear-gradient(to right,#C0C7CB 0%,#C0C7CB '+progress+',#E1E6E9 '+progress+',#E1E6E9 100%)'}">

vue-js

var form = new FormData()
 form.append('file', vm.$refs.upload.files[0])
 form.append('id', id)
 form.append('type', type)
 var config = {
  onUploadProgress: progressEvent => {
   var complete = (progressEvent.loaded / progressEvent.total * 100 | 0) + '%'
   this.progress = complete
  }
 }
 axios.post(`api/uploadFile`,
  form, config).then((res) => {
  if (res.data.status === 'success') {
   console.log('上传成功')
  }
 })

关键点在于progress事件,而axios对ajax封装之后需要在axios的config参数里面写好事件处理函数(具体参数写法可查看axios文档)

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
用js正确判断用户名cookie是否存在的方法
Jan 28 Javascript
jquery原理以及学习技巧介绍
Nov 11 Javascript
JS生成某个范围的随机数【四种情况详解】
Apr 20 Javascript
jQuery插件编写步骤详解
Jun 03 Javascript
如何用js实现鼠标向上滚动时浮动导航
Jul 18 Javascript
jQuery插件HighCharts绘制2D半圆环图效果示例【附demo源码下载】
Mar 09 Javascript
vue.js 实现输入框动态添加功能
Jun 25 Javascript
微信小程序开发背景图显示功能
Aug 08 Javascript
jQuery实现获取及设置CSS样式操作详解
Sep 05 jQuery
详解IOS微信上Vue单页面应用JSSDK签名失败解决方案
Nov 14 Javascript
react 生命周期实例分析
May 18 Javascript
写一个Vue loading 插件
Nov 09 Javascript
JavaScript通过mouseover()实现图片变大效果的示例
Dec 20 #Javascript
详解JS模块导入导出
Dec 20 #Javascript
vue实现样式之间的切换及vue动态样式的实现方法
Dec 19 #Javascript
vue+vuex+axios+echarts画一个动态更新的中国地图的方法
Dec 19 #Javascript
常用的9个JavaScript图表库详解
Dec 19 #Javascript
完美解决手机网页中输入框被输入法遮挡的问题
Dec 19 #Javascript
js解决软键盘遮挡输入框的问题分享
Dec 19 #Javascript
You might like
提高PHP性能的编码技巧以及性能优化详细解析
2013/08/24 PHP
javascript Math.random()随机数函数
2009/11/04 Javascript
jquery图片放大镜功能的实例代码
2013/03/26 Javascript
JavaScript中的常见问题解决方法(乱码,IE缓存,代理)
2013/11/28 Javascript
jQuery+AJAX实现网页无刷新上传
2015/02/22 Javascript
jQuery.form插件的使用及跨域异步上传文件
2016/04/27 Javascript
js停止冒泡和阻止浏览器默认行为的简单方法
2016/05/15 Javascript
JS公共小方法之判断对象是否为domElement的实例
2016/11/25 Javascript
清除js缓存的多种方法总结
2016/12/09 Javascript
jQuery的中 is(':visible') 解析及用法(必看)
2017/02/12 Javascript
基于Angular.js实现的触摸滑动动画实例代码
2017/02/19 Javascript
jQuery基于cookie实现换肤功能实例
2017/10/14 jQuery
vue 组件 全局注册和局部注册的实现
2018/02/28 Javascript
基于vue v-for 循环复选框-默认勾选第一个的实现方法
2018/03/03 Javascript
JavaScript动态检测密码强度原理及实现方法详解
2019/06/11 Javascript
vue登录以及权限验证相关的实现
2019/10/25 Javascript
请求时token过期自动刷新token操作
2020/09/11 Javascript
Python中使用 Selenium 实现网页截图实例
2014/07/18 Python
Swift 3.0在集合类数据结构上的一些新变化总结
2016/07/11 Python
使用Python更换外网IP的方法
2018/07/09 Python
Pandas中DataFrame的分组/分割/合并的实现
2019/07/16 Python
python框架flask表单实现详解
2019/11/04 Python
Pytorch 实现权重初始化
2019/12/31 Python
python开发实例之python使用Websocket库开发简单聊天工具实例详解(python+Websocket+JS)
2020/03/18 Python
pytorch查看通道数 维数 尺寸大小方式
2020/05/26 Python
Python ckeditor富文本编辑器代码实例解析
2020/06/22 Python
.NET是怎么支持多种语言的
2015/02/24 面试题
利用promise及参数解构封装ajax请求的方法
2021/03/24 Javascript
大专应届生个人简历的自我评价
2013/10/15 职场文书
舞蹈比赛获奖感言
2014/02/04 职场文书
幼儿园老师新年寄语2015
2014/12/08 职场文书
被告答辩状范文
2015/05/22 职场文书
初二物理教学反思
2016/02/19 职场文书
立秋之描写立秋的作文(五年级)
2019/08/08 职场文书
创业计划书之餐饮
2019/09/02 职场文书
Python入门之基础语法详解
2021/05/11 Python