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语言本身谈项目实战
Dec 27 Javascript
jQuery解决iframe高度自适应代码
Dec 20 Javascript
浅谈JavaScript编程语言的编码规范
Oct 21 Javascript
仿新浪微博返回顶部的jquery实现代码
Oct 01 Javascript
JavaScript中的闭包(Closure)详细介绍
Dec 30 Javascript
基于CSS3和jQuery实现跟随鼠标方位的Hover特效
Jul 25 Javascript
深入理解React中何时使用箭头函数
Aug 23 Javascript
jQuery实现checkbox全选功能完整实例
Jul 12 jQuery
JavaScript实现数组全排列、去重及求最大值算法示例
Jul 30 Javascript
vueJs实现DOM加载完之后自动下拉到底部的实例代码
Aug 31 Javascript
优雅的将ElementUI表格变身成树形表格的方法步骤
Apr 11 Javascript
vue element-ui实现input输入框金额数字添加千分位
Dec 29 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
解析Win7 XAMPP apache无法启动的问题
2013/06/26 PHP
php smarty truncate UTF8乱码问题解决办法
2014/06/13 PHP
php 无限分类 树形数据格式化代码
2016/10/11 PHP
PHP十六进制颜色随机生成器功能示例
2017/07/24 PHP
PHP基于session.upload_progress 实现文件上传进度显示功能详解
2019/08/09 PHP
thinkphp5.1 框架导入/导出excel文件操作示例
2020/05/25 PHP
Nigma vs Liquid BO3 第一场2.13
2021/03/10 DOTA
用Javascript同时提交多个Web表单的方法
2009/12/26 Javascript
快速解决FusionCharts联动的中文乱码问题
2013/12/04 Javascript
js利用事件的阻止冒泡实现点击空白模态框的隐藏
2014/01/24 Javascript
用html5 js实现点击一个按钮达到浏览器全屏效果
2014/05/28 Javascript
JS数组的遍历方式for循环与for...in
2014/07/31 Javascript
js实现浮动在网页右侧的简洁QQ在线客服代码
2015/09/04 Javascript
JavaScript实现清空(重置)文件类型INPUT元素值的方法
2016/11/17 Javascript
bootstrap suggest下拉框使用详解
2017/04/10 Javascript
详解如何在 vue 项目里正确地引用 jquery 和 jquery-ui的插件
2017/06/01 jQuery
jquery ajaxfileupload异步上传插件
2017/11/21 jQuery
js原生实现移动端手指滑动轮播图效果的示例
2018/01/02 Javascript
用element的upload组件实现多图片上传和压缩的示例代码
2019/02/12 Javascript
echarts多条折线图动态分层的实现方法
2019/05/24 Javascript
WebStorm中如何将自己的代码上传到github示例详解
2020/10/28 Javascript
Python模块结构与布局操作方法实例分析
2017/07/24 Python
Python面向对象编程之继承与多态详解
2018/01/16 Python
Python进阶之尾递归的用法实例
2018/01/31 Python
在PyTorch中Tensor的查找和筛选例子
2019/08/18 Python
Python中 CSV格式清洗与转换的实例代码
2019/08/29 Python
python3反转字符串的3种方法(小结)
2019/11/07 Python
Python3通过chmod修改目录或文件权限的方法示例
2020/06/08 Python
Python QTimer实现多线程及QSS应用过程解析
2020/07/11 Python
台湾乐天市场:日本No.1的网路购物网站
2017/03/22 全球购物
Myprotein俄罗斯官网:欧洲第一运动营养品牌
2019/05/05 全球购物
服装设计专业自荐书范文
2013/12/30 职场文书
优秀广告词大全
2014/03/19 职场文书
我爱幼儿园演讲稿
2014/09/11 职场文书
办公用房租赁协议书
2014/11/29 职场文书
公安机关起诉意见书
2015/05/20 职场文书