美文网首页
vue+element中的upload实现自定义多文件上传

vue+element中的upload实现自定义多文件上传

作者: Poppy11 | 来源:发表于2020-08-20 14:05 被阅读0次

业务需求就是需要上传多个文件,然后点击创建任务时,创建完任务,文件才根据创建完的任务的ID,进行对应的上传。

一、使用upload组件时,把action设置为空,定义:http-request也就是自定义上传,然后把:auto-upload设置为false,就是取消默认上传行为,:on-change就是上传文件时触发,:before-remove就是删除文件之前触发,:on-remove就是删除文件时触发。

<el-tooltip class="item" effect="dark" content="最多选择三个文件" placement="top-start">
    <el-upload
      drag
      action=""
      multiple
      :http-request="myUploadFile"
      ref="upload"
      :limit=3
      accept=".list,.xlsx,.xls,.dat"
      :file-list="fileList"
      :auto-upload="false"
      :on-change="onChangeFile"
      :before-remove="beforeRemove"
      :on-remove="onRemoveFile"
    >
      <i class="el-icon-upload"></i>
      <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
    </el-upload>
  </el-tooltip>

二、定义初始值,写上传文件、移除文件之前和移除文件的方法

data() {
      return {
        fileList: [], // // 上传文件列表
        upFileList: [], // 文件File列表 上传参数,
      }
    },

 onChangeFile(file, fileList) {
        this.upFileList = []
        const name = file.name.split('.')[1]
        for (let x of fileList) {
          if (x.raw) {
            this.upFileList.push(x.raw)
          }
        }
      },

      // 移除文件之前
      beforeRemove(file, fileList) {
        return this.$msgbox.alert(`确定移除 ${file.name}?`)
      },

      // 移除文件
      onRemoveFile(file, fileList) {
        this.upFileList = []
        for (let x of fileList) {
          if (x.raw) {
            this.upFileList.push(x.raw)
          }
        }
      },

三、主要来说说,上传文件的接口,我这边是当父组件提交表单的时候,才调用这个方法,大家测试上传文件的时候,文件内容一定不能为空,我就因为文件内容是空,导致一直报错。。。。

 myUploadFile() {
        let uploadForm = new FormData()
        uploadForm.append('id', 1)
        this.upFileList.map(item => {
          const fileType = item.name.split('.')[1]
          if (fileType === 'dat') {
            uploadForm.append('pkg', item)
          } else if (fileType === 'list') {
            uploadForm.append('md5', item)
          } else if (fileType === 'xls' || fileType === 'xlsx') {
            uploadForm.append('vul_excel', item)
          }
        })
        let config = {
          headers: {
            'Content-Type': 'multipart/form-data',
          }
        }
        this.$axios.post('/update/upload_file/', uploadForm, config).then(res => {
          if (res.data.code === 0) {
            this.$message({
              message: '上传成功',
              type: 'success'
            });
          }else{
            this.$message.error(res.data.msg)
          }
        })
      }

相关文章

网友评论

      本文标题:vue+element中的upload实现自定义多文件上传

      本文链接:https://www.haomeiwen.com/subject/gavsjktx.html