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 firefox兼容ie的dom方法脚本
May 18 Javascript
JavaScript控制两个列表框listbox左右交换数据的方法
Mar 18 Javascript
JS实现当前页居中分页效果的方法
Jun 18 Javascript
利用JQuery直接调用asp.net后台的简单方法
Oct 27 Javascript
ionic实现下拉刷新载入数据功能
May 11 Javascript
微信小程序实现移动端滑动分页效果(ajax)
Jun 13 Javascript
JavaScript Drum Kit 指南(纯 JS 模拟敲鼓效果)
Jul 23 Javascript
jquery 实现拖动文件上传加载进度条功能
Mar 18 jQuery
从零开始学习搭建React脚手架项目
Aug 23 Javascript
Vue+ElementUI使用vue-pdf实现预览功能
Nov 26 Javascript
Taro UI框架开发小程序实现左滑喜欢右滑不喜欢效果的示例代码
May 18 Javascript
JQuery使用数组遍历跳出each循环
Sep 01 jQuery
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
MYSQL环境变量设置方法
2007/01/15 PHP
php线性表顺序存储实现代码(增删查改)
2012/02/16 PHP
PHP+jQuery实现自动补全功能源码
2013/05/15 PHP
php可扩展的验证类实例(可对邮件、手机号、URL等验证)
2015/07/09 PHP
php微信开发之关注事件
2018/06/14 PHP
CSS常用网站布局实例
2008/04/03 Javascript
jQuery javaScript捕获回车事件(示例代码)
2013/11/07 Javascript
自己编写的支持Ajax验证的JS表单验证插件
2015/05/15 Javascript
gameboy网页闯关游戏(riddle webgame)--仿微信聊天的前端页面设计和难点
2016/02/21 Javascript
js+css实现select的美化效果
2016/03/24 Javascript
Javascript函数中的arguments.callee用法实例分析
2016/09/16 Javascript
深入理解JavaScript定时机制
2016/10/27 Javascript
Angularjs自定义指令实现三级联动 选择地理位置
2017/02/13 Javascript
JS实现禁止高频率连续点击的方法【基于ES6语法】
2017/04/25 Javascript
vue插件实现v-model功能
2018/09/10 Javascript
Vue在页面数据渲染完成之后的调用方法
2018/09/11 Javascript
vue使用websocket的方法实例分析
2019/06/22 Javascript
jQuery实现滑动星星评分效果(每日分享)
2019/11/13 jQuery
[01:03:00]DOTA2上海特级锦标赛A组败者赛 EHOME VS CDEC第一局
2016/02/25 DOTA
Pycharm如何打断点的方法步骤
2019/06/13 Python
python简单实现矩阵的乘,加,转置和逆运算示例
2019/07/10 Python
python word转pdf代码实例
2019/08/16 Python
python GUI库图形界面开发之PyQt5窗口背景与不规则窗口实例
2020/02/25 Python
Python接口测试结果集实现封装比较
2020/05/01 Python
解决django 向mysql中写入中文字符出错的问题
2020/05/18 Python
解决pyinstaller 打包exe文件太大,用pipenv 缩小exe的问题
2020/07/13 Python
Jupyter Notebook 安装配置与使用详解
2021/01/06 Python
html5 canvas实现跟随鼠标旋转的箭头
2016/03/11 HTML / CSS
薇诺娜官方网上商城:专注敏感肌肤
2017/05/25 全球购物
英国和爱尔兰最大的地毯零售商:Kukoon
2018/12/17 全球购物
银行实习鉴定
2013/12/13 职场文书
新党章心得体会
2014/09/04 职场文书
新郎结婚保证书
2015/02/26 职场文书
毕业生政审意见范文
2015/06/04 职场文书
Windows11性能真的上涨35%? 桌面酷睿i9实测结果公开
2021/11/21 数码科技
Nginx反向代理、重定向
2022/04/13 Servers