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压缩工具:X2JSCompactor
Jun 13 Javascript
RGB颜色值转HTML十六进制(HEX)代码的JS函数
Apr 25 Javascript
JS 图片缩放效果代码
Jun 09 Javascript
Fastest way to build an HTML string(拼装html字符串的最快方法)
Aug 20 Javascript
jquery.messager.js插件导致页面抖动的解决方法
Jul 14 Javascript
js和css写一个可以自动隐藏的悬浮框
Mar 05 Javascript
JavaScript截取指定长度字符串点击可以展开全部代码
Dec 04 Javascript
jQuery基于ajax()使用serialize()提交form数据的方法
Dec 08 Javascript
EasyUI 中combotree 默认不能选择父节点的实现方法
Nov 07 Javascript
Node.js复制文件的方法示例
Dec 29 Javascript
JS实现可视化文件上传
Sep 08 Javascript
Vue axios与Go Frame后端框架的Options请求跨域问题详解
Mar 03 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动态分页函数,PHP开发分页必备啦
2011/11/07 PHP
根据ip调用新浪api获取城市名并转成拼音
2014/03/07 PHP
简单实用的PHP防注入类实例
2014/12/05 PHP
Zend Framework教程之Zend_Db_Table表关联实例详解
2016/03/23 PHP
PHP实现适用于自定义的验证码类
2016/06/15 PHP
Zend Framework数据库操作方法实例总结
2016/12/11 PHP
解决jQuery动态获取手机屏幕高和宽的问题
2014/05/07 Javascript
JavaScript中的方法调用详细介绍
2014/12/30 Javascript
jquery实现简洁文件上传表单样式
2015/11/02 Javascript
纯javascript响应式树形菜单效果
2015/11/10 Javascript
BootStrap tab选项卡使用小结
2020/08/09 Javascript
JS 在数组指定位置插入/删除数据的方法
2017/01/12 Javascript
解决微信二次分享不显示摘要和图片的问题
2017/08/18 Javascript
gulp安装以及打包合并的方法教程
2017/11/19 Javascript
微信小程序使用video组件播放视频功能示例【附源码下载】
2017/12/08 Javascript
vue-cli下的vuex的简单Demo图解(实现加1减1操作)
2018/02/26 Javascript
JS实现的判断方法、变量是否存在功能示例
2020/03/28 Javascript
使用elementUI实现将图片上传到本地的示例
2018/09/04 Javascript
如何使用puppet替换文件中的string
2018/12/06 Javascript
微信小程序左右滚动公告栏效果代码实例
2019/09/16 Javascript
element-ui table行点击获取行索引(index)并利用索引更换行顺序
2020/02/27 Javascript
JavaScript console的使用方法实例分析
2020/04/28 Javascript
vue单应用在ios系统中实现微信分享功能操作
2020/09/07 Javascript
Python、Javascript中的闭包比较
2015/02/04 Python
python批量生成本地ip地址的方法
2015/03/23 Python
关于初始种子自动选取的区域生长实例(python+opencv)
2020/01/16 Python
Python 常用日期处理 -- calendar 与 dateutil 模块的使用
2020/09/02 Python
加拿大最大的箱包及旅游配件零售商:Bentley Leathers
2017/07/19 全球购物
中学生班主任评语
2014/01/30 职场文书
校园活动策划方案
2014/06/13 职场文书
党的群众路线对照检查材料
2014/08/27 职场文书
争做文明公民倡议书
2014/08/29 职场文书
暑期社会实践证明书
2014/11/17 职场文书
严以用权学习心得体会
2016/01/12 职场文书
Java练习之潜艇小游戏的实现
2022/03/16 Java/Android
唤醒紫霞仙子,携手再游三界!大话手游X《大话西游》电影合作专属剧情任务
2022/04/03 其他游戏