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一些实用技巧小结
Mar 18 Javascript
javascript继承之为什么要继承
Nov 10 Javascript
Javascript简单实现可拖动的div
Oct 22 Javascript
jQuery实现的多滑动门,多选项卡效果代码
Mar 28 Javascript
BootStrap+Angularjs+NgDialog实现模式对话框
Aug 24 Javascript
javascript 中的console.log和弹出窗口alert
Aug 30 Javascript
Javascript+CSS3实现进度条效果
Oct 28 Javascript
BootStrap轮播HTML代码(推荐)
Dec 10 Javascript
Vue.js手风琴菜单组件开发实例
May 16 Javascript
详解Vue实战指南之依赖注入(provide/inject)
Nov 13 Javascript
jQuery 判断元素是否存在然后按需加载内容的实现代码
Jan 16 jQuery
React中使用Vditor自定义图片详解
Dec 25 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
php url地址栏传中文乱码解决方法集合
2010/06/25 PHP
PHP下对字符串的递增运算代码
2010/08/21 PHP
php的declare控制符和ticks教程(附示例)
2014/03/21 PHP
php利用事务处理转账问题
2015/04/22 PHP
浅谈PHP中静态方法和非静态方法的相互调用
2016/10/04 PHP
javascript arguments 传递给函数的隐含参数
2009/08/21 Javascript
JavaScript读取中文cookie时的乱码问题的解决方法
2009/10/14 Javascript
Javascript解决常见浏览器兼容问题的12种方法
2010/01/04 Javascript
在JS中解析HTML字符串示例代码
2014/04/16 Javascript
jquery获取当前元素索引值用法实例
2015/06/10 Javascript
js实现仿阿里巴巴城市选择框效果实例
2015/06/24 Javascript
Bootstrap源码解读按钮(5)
2016/12/23 Javascript
js时间戳格式化成日期格式的多种方法介绍
2017/02/16 Javascript
使用node打造自己的命令行工具方法教程
2018/03/26 Javascript
JavaScript+H5实现微信摇一摇功能
2018/05/23 Javascript
vue.js图片转Base64上传图片并预览的实现方法
2018/08/02 Javascript
详解微信小程序胶囊按钮返回|首页自定义导航栏功能
2019/06/14 Javascript
用jQuery实现抽奖程序
2020/04/12 jQuery
Python中unittest模块做UT(单元测试)使用实例
2015/06/12 Python
不要用强制方法杀掉python线程
2017/02/26 Python
Python 获得命令行参数的方法(推荐)
2018/01/24 Python
Python定义一个跨越多行的字符串的多种方法小结
2018/07/19 Python
不知道这5种下划线的含义,你就不算真的会Python!
2018/10/09 Python
python实现飞机大战游戏
2020/10/26 Python
详解python命令提示符窗口下如何运行python脚本
2020/09/11 Python
python判断元素是否存在的实例方法
2020/09/24 Python
OPPO手机官方商城:中国手机市场出货量第一品牌
2017/10/18 全球购物
Fox Racing官方网站:越野摩托车和山地自行车装备和服装
2019/12/23 全球购物
经理任命书模板
2014/06/06 职场文书
美术第二课堂活动总结
2014/07/08 职场文书
公务员党员评议表自我鉴定
2014/09/14 职场文书
劳动者解除劳动合同通知书
2015/04/16 职场文书
2015企业年终工作总结范文
2015/05/27 职场文书
2015年教务处干事工作总结
2015/07/22 职场文书
2016个人先进事迹材料范文
2016/03/01 职场文书
《进击的巨人》新联动CM 兵长强势出击兽巨人
2022/04/05 日漫