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 new后的constructor属性
Aug 05 Javascript
JavaScript+CSS无限极分类效果完整实现方法
Dec 22 Javascript
jQuery基于muipicker实现仿ios时间选择
Feb 22 Javascript
bootstrap datetimepicker日期插件使用方法
Jan 13 Javascript
node.js入门教程之querystring模块的使用方法
Feb 27 Javascript
Angular 4依赖注入学习教程之简介(一)
Jun 04 Javascript
Vue2仿淘宝实现省市区三级联动
Apr 15 Javascript
vue2.0 移动端实现下拉刷新和上拉加载更多的示例
Apr 23 Javascript
解决JavaScript layui 下拉框不显示的问题
Aug 14 Javascript
jquery无缝图片轮播组件封装
Nov 25 jQuery
如何基于原生javaScript生成带图片的二维码
Nov 21 Javascript
vue组件讲解(is属性的用法)模板标签替换操作
Sep 04 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
初品cakephp 入门基础
2012/02/16 PHP
php不用正则验证真假身份证
2013/11/06 PHP
php通过文件流方式复制文件的方法
2015/03/13 PHP
JS之小练习代码
2008/10/12 Javascript
JS复制到剪贴板示例代码
2013/10/30 Javascript
非常漂亮的JS+CSS图片幻灯切换特效
2013/11/20 Javascript
Javascript学习笔记之 对象篇(四) : for in 循环
2014/06/24 Javascript
一个简单的动态加载js和css的jquery代码
2014/09/01 Javascript
JS实现控制表格只显示行边框或者只显示列边框的方法
2015/03/31 Javascript
包含中国城市的javascript对象实例
2015/08/03 Javascript
JavaScript使用Range调色及透明度实例
2016/09/25 Javascript
JavaScript实现图片瀑布流和底部刷新
2017/01/02 Javascript
详解如何将angular-ui的图片轮播组件封装成一个指令
2017/05/09 Javascript
react-native DatePicker日期选择组件的实现代码
2017/09/12 Javascript
JS实现的将html转为pdf功能【基于浏览器端插件jsPDF】
2018/02/06 Javascript
vue2中使用less简易教程
2018/03/27 Javascript
vue 利用路由守卫判断是否登录的方法
2018/09/29 Javascript
Angular父子组件通过服务传参的示例方法
2018/10/31 Javascript
微信小程序之高德地图多点路线规划过程示例详解
2021/01/18 Javascript
python时间整形转标准格式的示例分享
2014/02/14 Python
Python生成器定义与简单用法实例分析
2018/04/30 Python
Python测试线程应用程序过程解析
2019/12/31 Python
Python基于字典实现switch case函数调用
2020/07/22 Python
Python爬虫之Selenium实现键盘事件
2020/12/04 Python
英国最大最好的无人机商店:Drones Direct
2019/07/12 全球购物
Herschel美国官网:背包、手提袋及配件
2020/03/10 全球购物
三年大学自我鉴定
2014/01/16 职场文书
汽车装潢店创业计划书范文
2014/02/05 职场文书
国际贸易专业求职信
2014/06/04 职场文书
警察群众路线对照检查材料思想汇报
2014/10/01 职场文书
英语教师个人工作总结
2015/02/09 职场文书
三十年同学聚会感言
2015/07/30 职场文书
导游词之珠海轮廓
2019/10/25 职场文书
Python实战之实现康威生命游戏
2021/04/26 Python
Python Pandas读取Excel日期数据的异常处理方法
2022/02/28 Python
React自定义hook的方法
2022/06/25 Javascript