elementUI 的文件上传支持word、Excel文件,且做了文件类型和大小的限制(多文件上传)

使用elementUI 制作多文件上做了文件类型校验此段代码只支持.doc、.docx、.xls、.xlsx文件,且文件上传大小设置的200M哦,且文件上传个数为5个。

想要上传其他类型的文件只需要修改accept属性中的文件类型和beforeUpload方法中的文件类型校验即可

accept属性设置了,用户在选择文件是就只能看见此类型的文件,当然为了防止***钻用户选择所有文件类型选项,所以我们要在beforeUpload中去做文件类型的校验

beforeUpload这个方法是做什么的呢,(上传文件之前的钩子,参数为上传的文件,若返回 false 或者返回 Promise 且被 reject,则停止上传)详情参看elementUI官网

limit属性设置文件上传个数

在做多文件上传时注意:

  在循环追加列表时,不要使用forEach,可以使用map ,如果你偏要使用forEach ,你会发现有神奇的事情发生,呵呵,代码中有哦,你可以打开注释试试看哦。(forEach和map的区别)

 

样式就不给了哈,自己画就好了,废话不多说直接上代码:

    1、html:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<el-upload class="upload-demo" drag action="#" multiple show-file-list accept=".doc,.docx,.xls,.xlsx"  :before-upload="beforeUpload"  ref="upload"  :on-preview="handlePreview"
        :on-remove="handleRemove"
        :file-list="fileList"
        :auto-upload="false"
        :on-change="(file,fileList)=>changeHander(file,fileList)"
        :limit="5"
        >
      <i class="el-icon-upload"></i>
      <div class="el-upload__text">将文件拖到此处,或点击上传</div>
      <div class="el-upload__tip uploadeMax" >支持上传后缀为:.doc、.docx、.xls、.xlsx文件,且不超过200M</div>
      <div class="el-upload__tip uploadeError" >Excel文件单元格内容避免使用"=" "+" "-" 或@开头,以免下载查看时,造成命令注入风险</div>
  </el-upload>
  <div class="group-botton">
  <el-button plain>返回</el-button>
  <el-button plain @click="submitUpload">提交</el-button><br><br>

  2、逻辑:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
beforeUpload(file){
     console.log(file)
     // 文件类型校验
      var testmsg = file.name.substring(file.name.lastIndexOf(".") + 1);
     const extension = testmsg === "doc"|| testmsg === "docx" || testmsg === "xls"  || testmsg === "xlsx" ;
     if (!extension ) {
       this.$message({
         message: "上传文件只能是.doc、.docx、.xls、.xlsx格式!",
         type: "warning",
       });
       // 文件大小校验
       let size200M = file.size / 1024 / 1024 < 200
       if(!size200M){
         this.$message.warning('上传大小不能超过200M!')
         return false
       }
       
     }
     return extension;
   },
   // 点击提交按钮文件上传
    submitUpload() {
      if(this.fileList.length !=0){
       let formData = new FormData();
       // 错误的例子(不能使用forEach)
       // this.fileList.forEach((val,index)=>{
       //   formData.append("multipaartFiles",val.raw)
       //   console.log(val,index)
       // });
         //  formData.append("file",this.fileList[0].raw)
          this.fileList.map((item,index)=>{
            formData.append('file',item.raw);
          })<br>      //打印formData中的数据
      // for(var [a,b]of formData.entries()){
      //   console.log(a,b,'++++++++++++++')
     //   }
      // console.log(formData,'formData');
       axios({
         url:'后端的接口地址',
         method: 'post',
         data:formData,
         headers:{
              'Content-type':'multipart/form-data'
         }
       }).then( res=>{
         console.log(res,'res')
         if(res.status==200){
           this.fileList=[];
           this.$message({
              showClose: true,
             type:'success',
             message:'上传成功'
           })
         }else{
           this.$message({
             type:"error",
             message:res.data,
             show:true
           })
         }
       })
      }else{
        this.$message({type:'error',message:'您还没有上传文件,请去上传文件吧'})
      }
      this.$refs.upload.submit();
     },

  

 

posted @   深蓝XO  阅读(1953)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示