批量上传文件樂

131 阅读1分钟

1.子组件封装

<template>

  <!-- 批量上传樂 -->

  <el-upload

    class="upload-demo"

    ref="uploadFile"

    name="filedatas"

    :headers="importHeaders"

    :action="uploadAdminHost"

    :auto-upload="false"

    :data="otherData"

    multiple

  >

    <el-button slot="trigger" size="small" type="primary"

      >选取博客文件</el-button

    >

    <el-button

      style="margin-left: 10px"

      size="small"

      type="success"

      @click="submitUpload"

      >提交到服务器</el-button

    >

  </el-upload>

</template>

  


<script>

export default {

  props: {

    importHeaders: Object,

    uploadAdminHost: String,

    otherData: Object

  },

  methods: {

    submitUpload() {

      const { uploadFiles, action, data } = this.$refs.uploadFile

      this.uploadFiles({

        uploadFiles,

        data,

        action,

        success: (response) => {

          console.log(response)

          // 上传成功后,将里面的内容删除

          this.$refs.uploadFile.clearFiles()

          this.$emit('uploadSuccess', response)

        },

        error: (error) => {

          console.log('失败了', error)

        }

      })

    },

    uploadFiles({ uploadFiles, headers, data, action, success, error }) {

      let form = new FormData()

      // 文件对象

      uploadFiles.map((file) => form.append('file', file.raw))

      // 附件参数

      for (let key in data) {

        form.append(key, data[key])

      }

      let xhr = new XMLHttpRequest()

      // 异步请求

      xhr.open('post', action, true)

      // 设置请求头

      for (let header in headers) {

        xhr.setRequestHeader(header, headers[header])

      }

      xhr.onreadystatechange = function () {

        if (xhr.readyState == 4) {

          if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304) {

            success && success(xhr.responseText)

          } else {

            error && error(xhr.status)

          }

        }

      }

      xhr.send(form)

    }

  }

}

</script>


<style>

.upload-demo {

  display: inline-block;

  margin-right: 20px;

}

</style>

2.父组件调用

<template>
  <div>
    <leBatchUpload
      :importHeaders="otherDataBatch"
      :uploadAdminHost="fileUploadUrl"
      :otherData="otherDataBatch"
      @uploadSuccess="uploadSuccessFunc"
    ></leBatchUpload>
  </div>
</template>

<script>
import leBatchUpload from '@/components/leBatchUpload.vue';

export default {
  components: {
    leBatchUpload
  },
  data() {
    return {
      fileUploadUrl: 'http://example.com/upload', // 文件上传接口地址
      otherDataBatch: {
        // 其他需要传递的参数
      },
      uploadResult: null
    };
  },
  methods: {
    uploadSuccessFunc(res) {
      console.log('上传成功', res);
      this.uploadResult = res;
    }
  }
};
</script>