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 字符串连接[性能比较]
May 10 Javascript
基于Unit PNG Fix.js有时候在ie6下不正常的解决办法
Jun 26 Javascript
jquery click([data],fn)使用方法实例介绍
Jul 08 Javascript
解析dom中的children对象数组元素firstChild,lastChild的使用
Jul 10 Javascript
又一枚精彩的弹幕效果jQuery实现
Jul 25 Javascript
javascript实现的图片预览功能
Mar 25 Javascript
浅谈vue2 单页面如何设置网页title
Nov 08 Javascript
Vue中在新窗口打开页面及Vue-router的使用
Jun 13 Javascript
JavaScript使用indexOf()实现数组去重的方法分析
Sep 04 Javascript
4个顶级JavaScript高级文本编辑器
Oct 10 Javascript
js实现选项卡效果
Mar 07 Javascript
Vue使用鼠标在Canvas上绘制矩形
Dec 24 Vue.js
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将任何格式视频转为flv的代码
2009/09/03 PHP
php上传文件中文文件名乱码的解决方法
2013/11/01 PHP
PHP简单判断字符串是否包含另一个字符串的方法
2016/03/25 PHP
在Thinkphp中使用ajax实现无刷新分页的方法
2016/10/25 PHP
top.location.href 没有权限 解决方法
2008/08/05 Javascript
JavaScript Tips 使用DocumentFragment加快DOM渲染速度
2010/06/28 Javascript
JavaScript高级程序设计(第3版)学习笔记3 js简单数据类型
2012/10/11 Javascript
JavaScript伸缩的菜单简单示例
2013/12/03 Javascript
jquery中子元素和后代元素的区别示例介绍
2014/04/02 Javascript
浅谈JavaScript函数节流
2014/12/09 Javascript
JavaScript异步加载浅析
2014/12/28 Javascript
jQuery简单入门示例之用户校验demo示例
2016/07/09 Javascript
AngularJS过滤器filter用法总结
2016/12/13 Javascript
JavaScript使用简单正则表达式的数据验证功能示例
2017/01/13 Javascript
easyui关于validatebox实现多重规则验证的方法(必看)
2017/04/12 Javascript
微信小程序CSS3动画下拉菜单效果
2018/11/04 Javascript
python实现2048小游戏
2015/03/30 Python
python清除指定目录内所有文件中script的方法
2015/06/30 Python
浅谈Python爬取网页的编码处理
2016/11/04 Python
OpenCV-Python实现轮廓检测实例分析
2018/01/05 Python
python实现二叉查找树实例代码
2018/02/08 Python
Django框架使用mysql视图操作示例
2019/05/15 Python
Pandas的read_csv函数参数分析详解
2019/07/02 Python
Python封装成可带参数的EXE安装包实例
2019/08/24 Python
python通过nmap扫描在线设备并尝试AAA登录(实例代码)
2019/12/30 Python
Django {{ MEDIA_URL }}无法显示图片的解决方式
2020/04/07 Python
用 Python 制作地球仪的方法
2020/04/24 Python
css3中less实现文字长阴影(long shadow)
2020/04/24 HTML / CSS
HTML5新增的8类INPUT输入类型介绍
2015/07/06 HTML / CSS
伦敦高达60%折扣的钻石珠宝商:Purely Diamonds
2018/06/24 全球购物
Crocs欧洲官网:Crocs Europe
2020/01/14 全球购物
销售行业个人求职自荐信
2013/09/25 职场文书
护士的岗位职责
2013/12/04 职场文书
国际贸易毕业生求职信
2014/07/20 职场文书
初三毕业感言
2015/07/31 职场文书
如何制定一份可行的计划!
2019/06/21 职场文书