Element ui是由饿了么团队推出的基于vue的前端库,功能非常强大,其中的upload组件可以轻松的实现前端通过点击或者拖拽上传文件。不过upload组件默认的批量上传却是逐项上传,也就是你一次批量选择5个文件,那么会发送5次请求来分别上传这5个文件。
那么Element ui中upload组件怎么实现一次请求批量上传呢?这就需要通过自定义http-request来覆盖默认的上传行为,实现自定义上传,具体代码如下:
1
|
<template> <d2–container> <el–upload class="upload–demo" ref="upload" action="" :http–request="customUpload" :before–upload="beforeFileUpload" :on–preview="handlePreview" :on–remove="handleRemove" :on–success="handleSuccess" :file–list="fileList" :auto–upload="false" accept=".dbf" 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> <!—div slot="tip" class="el–upload__tip">只能上传jpg/png文件,且不超过500kb</div>—> </el–upload> </d2–container> </template> <script> export default { data() { return { fileList: [], fileData: new FormData() }; }, methods: { submitUpload() { this.$refs.upload.submit(); fileUpload(this.fileData).then(response => { }) }, beforeFileUpload(file){ let extension=file.name.substring(file.name.lastIndexOf('.')+1); const isDbf = extension === "dbf"; const isLt10M = file.size / 1024 / 1024 < 10 if (!isDbf) { this.$message.error('上传的数据文件只能是dbf格式!'); } if (!isLt10M) { this.$message.error('上传的单个数据文件大小不能超过10MB!'); } return isDbf && isLt10M; }, handleRemove(file, fileList) { }, handlePreview(file) { }, handleSuccess(response,file, fileList) { this.$message.success('上传成功') }, customUpload(file) { this.fileData.append('files[]', file.file) return false } } } //引入axios import request from '@/plugin/axios' export function fileUpload(file) { return request({ method: 'post', url: 'http://localhost/api/import', headers: {'Content-Type':'multipart/form-data'}, data: file }) } ipt>
|