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 相关文章推荐
JQuery each打印JS对象的方法
Nov 13 Javascript
如何在JavaScript中实现私有属性的写类方式(一)
Dec 04 Javascript
点击显示指定元素隐藏其他同辈元素的方法
Feb 19 Javascript
jquery scroll()区分横向纵向滚动条的方法
Apr 04 Javascript
jquery控制背景音乐开关与自动播放提示音的方法
Feb 06 Javascript
jquery+CSS实现的多级竖向展开树形TRee菜单效果
Aug 24 Javascript
Three.js如何用轨迹球插件(trackball)增加对模型的交互功能详解
Sep 25 Javascript
Vue 2.0入门基础知识之内部指令详解
Oct 15 Javascript
jquery分页优化操作实例分析
Aug 23 jQuery
原生js+css实现tab切换功能
Sep 17 Javascript
如何在vue中使用kindeditor富文本编辑器
Dec 19 Vue.js
Js类的构建与继承案例详解
Sep 15 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
基于文本的访客签到簿
2006/10/09 PHP
php比较多维数组中值的大小排序实现代码
2012/09/08 PHP
如何阻止网站被恶意反向代理访问(防网站镜像)
2014/03/18 PHP
PHP下的Oracle客户端扩展(OCI8)安装教程
2014/09/10 PHP
php ajax异步读取rss文档数据
2016/03/29 PHP
tp5框架基于Ajax实现列表无刷新排序功能示例
2020/02/10 PHP
javascript 系统文件夹文件操作及参数介绍
2013/01/08 Javascript
js与jQuery 获取父窗、子窗的iframe
2013/12/20 Javascript
bootstrapValidator表单验证插件学习
2016/12/30 Javascript
Javascript封装id、class与元素选择器方法示例
2017/03/13 Javascript
jQuery插件FusionCharts实现的Marimekko图效果示例【附demo源码】
2017/03/24 jQuery
JavaScript实现的超简单计算器功能示例
2017/12/23 Javascript
JQuery发送ajax请求时中文乱码问题解决
2019/11/14 jQuery
js+canvas实现刮刮奖功能
2020/09/13 Javascript
[03:02]2020完美世界城市挑战赛(秋季赛)总决赛回顾
2021/03/11 DOTA
python在多玩图片上下载妹子图的实现代码
2013/08/13 Python
python使用ctypes模块调用windowsapi获取系统版本示例
2014/04/17 Python
跟老齐学Python之正规地说一句话
2014/09/28 Python
Django 前后台的数据传递的方法
2017/08/08 Python
Python 获得命令行参数的方法(推荐)
2018/01/24 Python
python实现控制COM口的示例
2019/07/03 Python
Pytorch训练过程出现nan的解决方式
2020/01/02 Python
pytorch 改变tensor尺寸的实现
2020/01/03 Python
总结Pyinstaller的坑及终极解决方法(小结)
2020/09/21 Python
Python进行特征提取的示例代码
2020/10/15 Python
世界上最大的二手相机店:KEN
2017/05/17 全球购物
什么是.net
2015/08/03 面试题
党员干部反四风民主生活会对照检查材料思想汇报
2014/10/12 职场文书
简历自我评价模板
2015/03/11 职场文书
刑事附带民事诉讼答辩状
2015/05/22 职场文书
2015年语文教学工作总结
2015/05/25 职场文书
庆祝教师节主持词
2015/07/06 职场文书
运动会通讯稿50字
2015/07/20 职场文书
php 获取音视频时长,PHP 利用getid3 获取音频文件时长等数据
2021/04/01 PHP
nginx负载功能+nfs服务器功能解析
2022/02/28 Servers
Android Flutter实现图片滑动切换效果
2022/04/07 Java/Android