多文件上传 Upload 上传
- 只需要加上 multiple,如果有文件数量限制,使用limit
- 第一种方法:
<el-upload
ref="upload"
drag
:action="uploadUrlMul"
:on-success="uploadSuccessMul"
with-credentials
:file-list="form.fileListMul"
:before-upload="handleBeforeUploadMul"
:data="{ type: 0 }"
:on-change="handleChangeMul"
:on-remove="handleRemoveMul"
multiple
:on-exceed="handExceed"
:limit="20">
<i class="el-icon-upload"></i>
<div class="el-upload__text">
将文件拖到此处,或<em>点击上传</em>,<br />支持扩展名:{{typeList}} </div>
<div class="el-upload__tip" slot="tip">支持一次同时上传多份文件,上限20个,单个文件大小不超过5G </div>
</el-upload>
- action:后端接口路径
- with-credentials:防止跨域
- file-list:文件存储列表
- data:传给后端的参数
uploadSuccessMul(response, file, fileList) {
let flags = false;
flags = fileList.every((item) => {
return item.status === "success";
});
if (flags) {
fileList.forEach((i) => {
if (i.response) {
this.form.fileListMul.push({
name: i.name,
url: i.response.data,
});
}
});
}
if (response.code == 1) {
this.$message.success("上传文件成功!");
} else {
this.$message.error(response.message);
}
},
handExceed(files, fileList) {
this.$message.error(
`当前限制选择 20 个文件,本次选择了 ${files.length} 个文件,共选择了 ${
files.length + fileList.length
} 个文件,上传文件数量超过上限!`
);
},
handleBeforeUploadMul(file) {
let arrList = [];
arrList = this.form.fileListMul;
let flag = true;
let typeFlag = true;
if (arrList.length > 0) {
arrList.filter((item) => {
if (item.name == file.name) {
this.$message.error(file.name + "文件已存在!");
flag = false;
}
});
}
var index = file.name.lastIndexOf(".");
let fileType = file.name.substring(index + 1, file.name.length);
typeFlag = this.typeArr.includes(fileType);
if (!typeFlag) {
this.$message.error("文件格式上传文件格式错误,请检查文件格式!");
flag = false;
}
return flag;
},
handleChangeMul(file, fileList) {
if (file.status === "ready") {
this.timer = setInterval(() => {
this.getSession();
}, 1000 * 60 * 15);
}
if (file.status === "success") {
clearInterval(this.timer);
}
this.flagNext = fileList.every((item) => {
return item.status === "success";
});
},
handleRemoveMul(file, fileList) {
let url = "";
if (file.response) {
url = file.response.data;
} else {
url = file.url;
}
if (file.status === "success") {
let index = this.form.fileListMul
.map((item) => item.url)
.indexOf(url);
this.$api
.deleteFile(url)
.then((data) => {
if (data.data.code === 1) {
this.form.fileListMul.splice(index, 1);
this.$message.success(data.data.message);
} else {
this.$message.error(data.data.message);
}
})
.catch((e) => {
console.error(e);
this.$message.error("删除文件异常");
});
} else {
fileList.push(file);
for (let i = 0; i < fileList.length; i++) {
if (fileList[i].uid == file.uid) {
this.$refs.upload.abort(file);
fileList.splice(i, 1);
}
}
this.handleChangeMul(file, fileList);
console.log("上传取消");
}
},
handleRemoveMul(file, fileList) {
this.form.fileListMul = [];
if (fileList.length > 0) {
if (file.status === "success") {
fileList.push(file);
for (let i = 0; i < fileList.length; i++) {
if (fileList[i].uid == file.uid) {
fileList.splice(i, 1);
}
}
this.form.fileListMul = fileList;
} else if (file.status === "ready" || file.status === "uploading") {
this.$refs.upload.abort(file);
this.form.fileListMul = fileList;
this.handleChangeMul(file,fileList)
console.log("上传取消");
}
}
},
<el-upload
class="upload-demo"
ref="upload"
action="/"
:before-remove="beforeRemove"
:on-remove="handle_remove"
multiple
:limit="5"
:on-exceed="handleExceed"
:file-list="fileList"
:http-request="handleHttpRequest"
>
<el-button size="small" type="primary">选择上传文件</el-button>
</el-upload>
handleHttpRequest(file) {
this.files = file.file;
this.fileName = file.name;
let fileFormData = new FormData();
fileFormData.append("file", this.files, this.fileName);
let requestConfig = {
headers: {
"Content-Type": "multipart/form-data",
},
};
this.$post(this.api.upload, fileFormData, requestConfig)
.then((res) => {
this.fileList.push(res.data);
})
.catch((err) => {
console.log(err);
});
},
handleExceed(files, fileList) {
this.$message.warning(
`当前限制选择 5 个文件,本次选择了 ${files.length} 个文件,共选择了 ${
files.length + fileList.length
} 个文件`
);
},
beforeRemove(file, fileList) {
return this.$confirm(`确定移除 ${file.name}?`);
},
handle_remove(file, fileList) {
var _tmp = fileList;
for (var i,index = 0; i < _tmp.length; i++) {
if (_tmp[i].name = file.name) {
_tmp.splice(index, 1);
break;
}
}
this.fileList = _tmp;
},