el-upload多文件上传

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了el-upload多文件上传相关的知识,希望对你有一定的参考价值。

参考技术A dom节点:

方法:

多文件上传时,formData不能做为数组进行上传,他是一个字节流文件,需要把多个文件直接放入到formData里。

el-upload multiple多文件上传,只传上一个的问题

问题: 使用el-upload上传多文件时,on-success钩子只拿到了一个response,上传只成功上传了一个。

解决:使用:http-requst来覆盖默认的上传行为,可以自定义上传的实现。

代码:

<template>
  <el-upload
    :disabled="disabled"
    :drag="type === ‘drag‘"
    :multiple="true"
    action="/files/upload"
    :http-request="uploadRequest"
    :with-credentials="true"
    :file-list="fileList"
    :before-upload="beforeUpload"
    :on-preview="filePreview"
    :on-remove="fileRemove"
    :on-success="uploadSuccess"
    :on-error="uploadError">
    <template v-if="type === ‘button‘">
      <el-button class="width-7" size="small" type="primary">上传</el-button>
    </template>
    <template v-else-if="type === ‘drag‘">
      <i class="el-icon-upload"></i>
      <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
    </template>
  </el-upload>
</template>
<script>
  import {mapActions} from ‘vuex‘;

  export default {
    props: {
      fileList: {
        required: true
      },
      type: {
        default: ‘drag‘
      },
      disabled: false,
      fileType: {
        type: String,
        default: ‘all‘
      },
      isAttach: {
        default: false
      }
    },
    data() {
      return {};
    },
    methods: {
      ...mapActions([
        ‘deleteFile‘
      ]),
      beforeUpload(file) {
        if (this.fileType === ‘emergency‘) {
          let str = ‘pdf,bmp,jpg,png,tif,gif,pcx,tga,exif,fpx,svg,psd,cdr,pcd,dxf,ufo,eps,ai,raw‘;
          if (!(str.indexOf(file.name.split(‘.‘).reverse()[0]) > -1)) {
            this.$message.error(‘文件类型错误!‘);
            return false;
          }
        } else if (this.isAttach && file && file.size > 500 * 1024 * 1024) {
          this.$message.error(‘上传文件不得超过500M‘);
          return false;
        }
      },
      filePreview(file) {
        window.open(file.url);
      },
      fileRemove(file) {
        if (file && file.id && !this.isAttach) {
          this.deleteFile(file.id).then(() => {
            this.$emit(‘attachmentDelete‘, file.id);
            this.$message({message: ‘文件删除成功‘, type: ‘success‘});
          }).catch(() => {
            this.$message.error(`文件“${file.name}”删除失败`);
          });
        } else if (this.isAttach && file && file.attachmentId) {
          this.deleteFile(file.attachmentId).then(() => {
            this.$emit(‘attachmentDelete‘, file.attachmentId);
            this.$message({message: ‘文件删除成功‘, type: ‘success‘});
          }).catch(() => {
            this.$message.error(`文件“${file.name}”删除失败`);
          });
        }
      },
      uploadSuccess(response) {
        if (response) {
          this.$message({message: ‘文件上传成功‘, type: ‘success‘});
          this.$emit(‘uploadSuccess‘, response);
        }
      },
      uploadError(err, file) {
        if (err) {
          this.$message.error(`文件“${file.name}”上传失败`);
        }
      },
      uploadRequest(param) {
        let fileObj = param.file;
        let form = new FormData();
        form.append(‘file‘, fileObj);
        this.$axios.$post(`/files/upload`, form, {
          process: function (event) {
            param.file.percent = event.loaded / event.total * 100;
            param.onprogress(param.file);
          }
        }).then(res => {
          this.uploadSuccess(res);
        }).catch(res => {
          this.uploadError();
        });
      }
    }
  };
</script>

 

以上是关于el-upload多文件上传的主要内容,如果未能解决你的问题,请参考以下文章

element el-upload自定义上传显示进度条,多文件上传进度

el-upload用form的方式多文件上传的方法

elementUI+el-upload 上传文件大小与文件类型校验

elementui el-upload图片文件上传必传校验

element-ui upload组件多文件上传

el-upload上传文件后跳转页面后再返回已上传文件的回显