Vue实践-ElementUI中Upload组件如何批量上传

ElementUI中Upload组件如何批量上传

首先就是upload组件

复制代码
      <el-upload
        class="upload-demo"
        ref="uploadFile"
        name="filedatas"
        :headers="importHeaders"
        :action="uploadAdminHost"
        :auto-upload="false"
        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>

然后是上传逻辑,首先获取到upload组件上的dom,然后获取文件,上传地址和数据

复制代码
    // 文件上传
    submitUpload() {
      let {uploadFiles, action, data} = this.$refs.uploadFile      
      this.uploadFiles({
        uploadFiles,
        data,
        action,
        success: (response) => {
          console.log(response)
          // 上传成功后,将里面的内容删除
          this.$refs.uploadFile.clearFiles();
          this.$refs.uploadPicture.clearFiles();
        },
        error: (error) => {
          console.log('失败了', error)
        }
      })
    },

下面封装了一个 uploadFiles 方法,这里uploadFiles 就可以是多文件,通过封装ajax方式

复制代码
    /**
     * 自定义上传文件
     * @param fileList 文件列表
     * @param data 上传时附带的额外参数
     * @param url 上传的URL地址
     * @param success 成功回调
     * @param error 失败回调
     */
    uploadFiles({uploadFiles, headers, data, action, success, error}) {
      let form = new FormData()
      // 文件对象
      uploadFiles.map(file => form.append("filedatas", file.raw))
      // 附件参数
      for (let key in data) {
        form.append(key, data[key])
      }
      let xhr = new XMLHttpRequest()
      // 异步请求
      xhr.open("post", action, true)
      // 设置请求头
      xhr.setRequestHeader("Authorization", getToken());
      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)
    }

最后后台接口,同时接受多个文件

复制代码
    @PostMapping("/pictures")
    public Object uploadPics(HttpServletRequest request, List<MultipartFile> filedatas) {
          // 逻辑代码
	}

最后查看请求,会同时携带多个文件,并且返回多个上传成功的结果

相关推荐
CDwenhuohuo1 小时前
优惠券组件直接用 uview plus
前端·javascript·vue.js
AI砖家1 小时前
Vue3组件传参大全,各种传参方式的对比
前端·javascript·vue.js
爱怪笑的小杰杰2 小时前
Leaflet 高性能大数据量图圆:彻底解决缩放/拖拽偏移问题
大数据·前端·vue.js·贴图
笔优站长3 小时前
vue-sign-canvas v2 重构复盘:从 Vue 2 签名板到 Vue 3 + TypeScript 组件库
前端·vue.js
Aolith3 小时前
事件驱动设计:我如何为校园论坛实现消息通知功能
前端·vue.js
代码煮茶3 小时前
Vue3 Mock 数据实战 | 用 Mockjs + vite-plugin-mock 搭建前端独立开发环境
javascript·vue.js
彭于晏Yan5 小时前
OkHttp 与 RestTemplate 技术选型对比
java·spring boot·后端·okhttp
糯米团子7495 小时前
vue知识点复习
前端·vue.js
范同学~5 小时前
多个表单如何用element ui 校验
javascript·vue.js·ui
xuankuxiaoyao7 小时前
vue.js 设计与开发 ---路由
前端·javascript·vue.js