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 相关文章推荐
[原创]站长必须要知道的javascript广告代码
May 30 Javascript
理解 JavaScript 预解析
Oct 25 Javascript
JS随机漂浮广告代码具体实例
Nov 19 Javascript
js面向对象编程之如何实现方法重载
Jul 02 Javascript
AngularJS ng-template寄宿方式用法分析
Nov 07 Javascript
详解javascript立即执行函数表达式IIFE
Feb 13 Javascript
Angular中实现树形结构视图实例代码
May 05 Javascript
解决BootStrap Fileinput手机图片上传显示旋转问题
Jun 01 Javascript
Vue实现virtual-dom的原理简析
Jul 10 Javascript
利用express启动一个server服务的方法
Sep 17 Javascript
Vue.js搭建移动端购物车界面
Jun 28 Javascript
layui实现数据表格table分页功能(ajax异步)
Jul 27 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
暴雪前总裁遗憾:没尽早追赶Dota 取消星际争霸幽灵
2020/03/08 星际争霸
第十四节 命名空间 [14]
2006/10/09 PHP
比较好用的PHP防注入漏洞过滤函数代码
2012/04/11 PHP
分享下php5类中三种数据类型的区别
2015/01/26 PHP
php数据库的增删改查 php与javascript之间的交互
2017/08/31 PHP
Laravel使用scout集成elasticsearch做全文搜索的实现方法
2018/11/30 PHP
让GoogleCode的SVN下的HTML文件在FireFox下正常显示.
2009/05/25 Javascript
JavaScript Perfection kill 测试及答案
2010/03/23 Javascript
JavaScript快速检测浏览器对CSS3特性的支持情况
2012/09/26 Javascript
javascript实现鼠标点击页面 移动DIV
2016/12/02 Javascript
angular4模块中给标签添加背景图的实现方法
2017/09/15 Javascript
原生JS上传大文件显示进度条 php上传文件代码
2020/03/27 Javascript
微信小程序利用canvas 绘制幸运大转盘功能
2018/07/06 Javascript
vue项目中仿element-ui弹框效果的实例代码
2019/04/22 Javascript
判断文字超过2行添加展开按钮,未超过则不显示,溢出部分显示省略号
2019/04/28 Javascript
简单了解JavaScript异步
2019/05/23 Javascript
LayUI动态设置checkbox不显示的解决方法
2019/09/02 Javascript
layui之数据表格--与后台交互获取数据的方法
2019/09/29 Javascript
详解三种方式在React中解决绑定this的作用域问题并传参
2020/08/18 Javascript
python中list循环语句用法实例
2014/11/10 Python
python在TXT文件中按照某一字符串取出该字符串所在的行方法
2018/12/10 Python
一篇文章搞懂Python的类与对象名称空间
2018/12/10 Python
浅谈python函数调用返回两个或多个变量的方法
2019/01/23 Python
python 模拟贷款卡号生成规则过程解析
2019/08/30 Python
python 图像处理画一个正弦函数代码实例
2019/09/10 Python
python 模拟创建seafile 目录操作示例
2019/09/26 Python
Python Handler处理器和自定义Opener原理详解
2020/03/05 Python
如何在Windows中安装多个python解释器
2020/06/16 Python
网络信息管理员岗位职责
2014/01/05 职场文书
幼教毕业生自我鉴定
2014/01/12 职场文书
人事经理岗位职责范本
2014/08/04 职场文书
员工离职证明范本
2015/06/12 职场文书
2016年师德学习心得体会
2016/01/12 职场文书
《从现在开始》教学反思
2016/02/16 职场文书
SpringBoot工程下使用OpenFeign的坑及解决
2021/07/02 Java/Android
java实现自定义时钟并实现走时功能
2022/06/21 Java/Android