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中的自定义指令
Dec 07 Vue.js
jenkins自动构建发布vue项目的方法步骤
Jan 04 Vue.js
如何让vue长列表快速加载
Mar 29 Vue.js
Vue和Flask通信的实现
May 19 Vue.js
Vue实现动态查询规则生成组件
May 27 Vue.js
vue使用Google Recaptcha验证的实现示例
Aug 23 Vue.js
SSM VUE Axios详解
Oct 05 Vue.js
详细聊聊vue中组件的props属性
Nov 02 Vue.js
Vue的生命周期一起来看看
Feb 24 Vue.js
vue使用refs获取嵌套组件中的值过程
Mar 31 Vue.js
Vue+Flask实现图片传输功能
Apr 01 Vue.js
vue本地构建热更新卡顿的问题“75 advanced module optimization”完美解决方案
Aug 05 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
PHP 最大运行时间 max_execution_time修改方法
2010/03/08 PHP
php操作MongoDB基础教程(连接、新增、修改、删除、查询)
2014/03/25 PHP
javascript优先加载笔记代码
2008/09/30 Javascript
javascript innerHTML使用分析
2010/12/03 Javascript
JQuery中extend的用法实例分析
2015/02/08 Javascript
javascript异步编程代码书写规范Promise学习笔记
2015/02/11 Javascript
使用AngularJS创建单页应用的编程指引
2015/06/19 Javascript
javascript中对变量类型的判断方法
2015/08/09 Javascript
JS文字球状放大效果代码分享
2015/08/19 Javascript
JS实现超精简的链接列表在固定区域内滚动效果代码
2015/11/04 Javascript
jQuery使用$.ajax提交表单完整实例
2015/12/11 Javascript
js纯数字逐一停止显示效果的实现代码
2016/03/16 Javascript
BootStrap table表格插件自适应固定表头(超好用)
2016/08/24 Javascript
js仿网易表单及时验证功能
2017/03/07 Javascript
JS基于对象的特性实现去除数组中重复项功能详解
2017/11/17 Javascript
angular 未登录状态拦截路由跳转的方法
2018/10/09 Javascript
Json实现传值到后台代码实例
2020/06/30 Javascript
通过实例了解Nodejs模块系统及require机制
2020/07/16 NodeJs
jQuery实现评论模块
2020/08/19 jQuery
浅谈js数组splice删除某个元素爬坑
2020/10/14 Javascript
python模块之StringIO使用示例
2015/04/08 Python
Python实现监控程序执行时间并将其写入日志的方法
2015/06/30 Python
举例讲解Django中数据模型访问外键值的方法
2015/07/21 Python
浅谈Python中带_的变量或函数命名
2017/12/04 Python
python处理DICOM并计算三维模型体积
2019/02/26 Python
PYTHON如何读取和写入EXCEL里面的数据
2019/10/28 Python
python实现图片上添加图片
2019/11/26 Python
python实现图片转换成素描和漫画格式
2020/08/19 Python
python -v 报错问题的解决方法
2020/09/15 Python
90后毕业生的求职信范文
2013/09/21 职场文书
个人工作表现评语
2014/04/30 职场文书
酒店服务员岗位职责
2015/02/09 职场文书
酒会开场白大全
2015/06/01 职场文书
学术研讨会主持词
2015/07/04 职场文书
《自己的花是让别人看的》教学反思
2016/02/19 职场文书
导游词之峨眉乐山/兵马俑/北京故宫御花园
2019/09/03 职场文书