vue+iview实现文件上传


Posted in Vue.js onNovember 17, 2020

vue+iview文件上传(base64编码、类型验证、大小限制、多文件上传及文件预览)

​ iview对文件上传提供了一个专门的标签Upload,不过这个标签默认需要一个接口action属性,但一般我们向后台上传文件并不会选择文件直接就上传了 而是需要和其他的值一起发送请求给后台,并且文件都是转成base64编码。

iview提供了一个方法阻止默认上传:before-upload这个方法是在上传文件之前做的一些操作,当这个方法返回false表示手动上传,不会通过action属性来提交文件

base64、类型验证、大小限制:

<Upload
 :before-upload="before"
 action="">
 <Button icon="ios-cloud-upload-outline">文件上传</Button>
 </Upload>
 <div v-if="file!==null">{{file.name}}</div>
<script>
 export default{
 data(){
 return{
 file:null
 }
 }
 methods:{
 before(file) {//上传文件之前的钩子,参数为上传的文件,若返回 false 或者 Promise 则停止上传
 this.file = file
 const FileExt = this.file.name.replace(/.+\./, "");//取得文件的后缀名
 if (file.size > 2097152) {//限制文件的大小
  this.$Message.error(file.name + '大小超过2M!')
  this.file = null //超过大小将文件清空
 } else if (['mp3'].indexOf(FileExt.toLowerCase()) === -1) { //判断文件是否是mp3格式
  this.$Message.error('请上传以mp3结尾的文件');
  this.file=null
 }else{
  const reader = new FileReader() //读取文件的字符流
  reader.readAsDataURL(file)//将文件读取为 DataURL 以data:开头的字符串
  reader.onload = e => {
  // 读取到的图片base64 数据编码 将此编码字符串传给后台即可
  const code = e.target.result;
  this.algorithmData.videoFiles = code
  }
 }
 return false
 },
 /*上面判断文件格式的方式有很多 file对象中包含了文件的type属性 可打印file看看有哪些文件属性
 对于一般文件的格式type都能显示 但是对于ini这些类型的配置文件是无法给出你类型的
 如果后台明确指出具体的后缀名 用这个比较粗暴
 if(!/image\/\w+/.test(file.type)) 图片验证 只要是图片类型都允许,就不需要通过后缀名判断
 */
 }
 }
</script>

注意:当你的before-upload返回false后。upload的其他方法是不会触发的,比如文件格式验证和文件大小限制的这个钩子是发生在before-upload之后的均不会触发

Upload标签提供一个multiple属性允许上传多个文件

多文件上传、图片预览:

vue+iview实现文件上传

<div class="demo-upload-list" v-for="fileSrc in srcList">
 <img :src="fileSrc" alt=""><!-- 图片预览部分-->
</div>
<Tooltip content="文件格式为jpg、jpeg、png" placement="right">
 <Upload
 :before-upload="handleBeforeUpload"
 multiple
 type="drag"
 action=""
 style="display: inline-block;width:58px;">
 <div style="width: 58px;height:58px;line-height: 58px;">
 <Icon type="ios-camera" size="20"></Icon>
 </div>
 </Upload>
</Tooltip>

<script>
 export default{
 data(){
 return{
 uploadList:[],
 srcList = []
 }
 }
 methods:{
 handleBeforeUpload(file) {
 /*const FileExt = file.name.replace(/.+\./, "");*/
 if(this.uploadList.length<3) {
  if (file.size > 2097152) {
  this.$Message.error(file.name + '大小超过2M!')
  this.file = null
  } else if (!/image\/\w+/.test(file.type)) {
  this.$Message.error('请上传以jpg、jpeg、png等结尾的图片文件');//FileExt.toLowerCase()
  this.file = null
  }
  this.base64(file)
  this.uploadList.push(file)
 }
 else{
  this.$Message.warning('只能上传3张图片!')
 }
 return false;
 },
 base64(file) {
 let reader = new FileReader()
 reader.onload = (e) => {
  this.srcList.push(e.target.result)//将base64编码存储到路径数组中
 }
 reader.readAsDataURL(file)
 },
 }
 }
</script>

关于vue.js的学习教程,请大家点击专题vue.js组件学习教程、Vue.js前端组件学习教程进行学习。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Vue.js 相关文章推荐
在Vue中使用Echarts可视化库的完整步骤记录
Nov 18 Vue.js
Vue 打包的静态文件不能直接运行的原因及解决办法
Nov 19 Vue.js
Vue实现购物小球抛物线的方法实例
Nov 22 Vue.js
vue3+typeScript穿梭框的实现示例
Dec 29 Vue.js
vue中使用echarts的示例
Jan 03 Vue.js
vuex的使用步骤
Jan 06 Vue.js
Vue看了就会的8个小技巧
Jan 21 Vue.js
Vue实现摇一摇功能(兼容ios13.3以上)
Jan 26 Vue.js
Vue项目打包部署到apache服务器的方法步骤
Feb 01 Vue.js
Vue中插槽slot的使用方法与应用场景详析
Jun 08 Vue.js
Vue2.0搭建脚手架
Mar 13 Vue.js
vue3.0 数字翻牌组件的使用方法详解
Apr 20 Vue.js
vue中echarts的用法及与elementui-select的协同绑定操作
Nov 17 #Vue.js
vue+iview实现分页及查询功能
Nov 17 #Vue.js
快速解决vue2+vue-cli3项目ie兼容的问题
Nov 17 #Vue.js
vue+iview分页组件的封装
Nov 17 #Vue.js
在vue中通过render函数给子组件设置ref操作
Nov 17 #Vue.js
vue+vant实现购物车全选和反选功能
Nov 17 #Vue.js
vue使用vant中的checkbox实现全选功能
Nov 17 #Vue.js
You might like
递归列出所有文件和目录
2006/10/09 PHP
基于jQuery的ajax功能实现web service的json转化
2009/08/29 Javascript
dess中一个简单的多路委托的实现
2010/07/20 Javascript
jQuery 源码分析笔记(5) jQuery.support
2011/06/19 Javascript
jQuery学习笔记 操作jQuery对象 CSS处理
2012/09/19 Javascript
让图片旋转任意角度及JQuery插件使用介绍
2013/03/20 Javascript
巧用jquery解决下拉菜单被Div遮挡的相关问题
2014/02/13 Javascript
jquery幻灯片插件bxslider样式改进实例
2014/10/15 Javascript
Nginx上传文件全部缓存解决方案
2015/08/17 Javascript
JS实现获取键盘按下的按键并显示在页面上的方法
2015/11/04 Javascript
jQuery插件formValidator自定义函数扩展功能实例详解
2015/11/25 Javascript
JS实现控制文本框的内容
2016/07/10 Javascript
jQuery使用方法
2017/02/04 Javascript
jQuery插件HighCharts绘制简单2D折线图效果示例【附demo源码】
2017/03/21 jQuery
Vue-cli创建项目从单页面到多页面的方法
2017/09/20 Javascript
微信小程序常用简易小函数总结
2019/02/01 Javascript
JS开发 富文本编辑器TinyMCE详解
2019/07/19 Javascript
JS查找孩子节点简单示例
2019/07/25 Javascript
详解jQuery中的prop()使用方法
2020/01/05 jQuery
Node.js API详解之 timer模块用法实例分析
2020/05/07 Javascript
python网络爬虫学习笔记(1)
2018/04/09 Python
Python常用特殊方法实例总结
2019/03/22 Python
python实现超市管理系统(后台管理)
2019/10/25 Python
python输出结果刷新及进度条的实现操作
2020/07/13 Python
python3代码输出嵌套式对象实例详解
2020/12/03 Python
西班牙国家航空官方网站:Iberia
2017/11/16 全球购物
Ejb技术面试题
2015/04/29 面试题
社区文化建设方案
2014/05/02 职场文书
计算机应用应届生求职信
2014/07/12 职场文书
交通安全教育心得体会
2016/01/15 职场文书
2016年大学生社区服务活动总结
2016/04/06 职场文书
Web前端:CSS最强总结 附详细代码
2021/03/31 HTML / CSS
Nginx已编译的nginx-添加新模块
2021/04/01 Servers
教你用Python写一个植物大战僵尸小游戏
2021/04/25 Python
Python进度条的使用
2021/05/17 Python
Ruby GDBM操作简介及数据存储原理
2022/04/19 Ruby