关于Element上传组件beforeUpload上传前限制失效问题
作者:前端 晓雷
这篇文章主要介绍了Element上传组件beforeUpload上传前限制失效问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
Element上传组件beforeUpload上传前限制失效
在before-upload(上传文件之前的钩子 参数为上传的文件 若返回 false 或者返回 Promise 且被 reject 则停止上传)钩子里去做判断 这里有一个坑
当你设置了 :auto-upload="false" 的时候, 这个钩子是不会被触发的,因此也可以在on-change中做判断。
beforeUpload(file, fileList) { if (file.size / (1024 * 1024) > 500) { // 限制文件大小 this.$message.warning(`当前限制文件大小不能大于500M`) return false } let suffix = this.getFileType(file.name) //获取文件后缀名 let suffixArray = ['jpg', 'png', 'jpeg', 'gif'] //限制的文件类型,根据情况自己定义 if (suffixArray.indexOf(suffix) === -1) { this.$message({ message: '文件格式错误', type: 'error', duration: 2000 }) this.$refs.uploadPhoto.handleRemove(file); } return suffixArray }, getFileType(name) { let startIndex = name.lastIndexOf('.') if (startIndex !== -1) { return name.slice(startIndex + 1).toLowerCase() } else { return '' } }
element中before-upload不起作用的问题 、on-change上传文件大小限制
1、因为设置了:auto-upload="false"
:on-change="changeImgClick"方法 和 before-upload 发生了冲突 导致before-upload 方法不起作用
如果有:auto-upload="false" 属性就要用:on-change 方法监听
2、on-change上传文件大小限制
当文件超过20MB的时候让他提示文件大小不能超过20MB,请重新上传。
下面我们来看代码:
<el-upload class="upload-demo" ref="upload" name="upload" :action="action()" :on-change="(file, fileList) => {handleChange(file, fileList, scope);} " :on-remove=" (file, fileList) => {handleRemove(file, scope);}" :file-list="scope.row.fileList" :auto-upload="false" > <el-button slot="trigger" size="mini" type="primary" v-if="scope.row.fileList.length == 0" >上传文件</el-button> </el-upload>
首先在el-upload的:on-change事件里的handleChange的方法中可以获取上传文件的大小
handleChange(file, fileList, scope) { //获取上传文件大小 let imgSize = Number(file.size / 1024 / 1024); if (imgSize > 20) { this.$msgbox({ title: "", message: "文件大小不能超过20MB,请重新上传。", type: "warning", }); this.materialList[scope.$index].fileList.splice(scope.index, 1); return; } //后面可以不用 我自己也没有用到 this.text = "上传中"; this.loading = true; this.materialList[scope.$index].fileList.push(file); let data = new FormData(); data.append("files", file.raw); uploadFile(data, scope.row.materialName).then((response) => { if (response.success) { this.loading = false; this.listedFiles[scope.$index] = response.result[0].id; } else { this.loading = false; this.msgError(response.message || "操作失败"); } }); },
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
- 使用element upload上传组件如何去掉删除按钮
- element el-upload文件上传覆盖第一个文件的实现
- 解决elementui上传组件el-upload无法第二次上传问题
- elementUI使用el-upload上传文件写法及避坑总结(上传图片/视频到本地/服务器及回显+删除)
- element-ui中el-upload多文件一次性上传的实现
- element-ui 中使用upload多文件上传只请求一次接口
- vue-cli3.0+element-ui上传组件el-upload的使用
- element-ui upload组件多文件上传的示例代码
- element UI upload组件上传附件格式限制方法
- 在vue项目中使用element-ui的Upload上传组件的示例
- Element中Upload组件上传功能实现(图片和文件的默认上传及自定义上传)