vue.js

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript类库 > vue.js > Element上传组件beforeUpload上传前限制失效

关于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 || "操作失败");
        }
      });
    },

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文