element-upload覆盖默认行为(多个文件上传调用一次接口)
需求:
在做公司文件共享系统的项目的时候,遇到个单次上传最大个数10的需求。
过程:
去翻了文档,看到limit这个属性,美滋滋的加上了。自测了下,选择11个确实执行了on-exceed对应的方法,提示出来超出限制。
提测阶段:
测试突然说我这个限制有bug,最后测试确实是存在bug,原因是文档这个limit是叠加上传的文件个数,而不是每次。并且upload组件,默认上传多个的方式是,调用多次接口。(例如上传5个文件,调用5次)。这肯定也是不行的。 于是看到
了http-request属性,使用他覆盖默认上传行为。

解决方案:
直接贴代码了。需要注意的是,记得及时清空已上传的文件列表fileLIs。 代码写的比较烂,看思路就好 哈哈哈

submitUpload() {
//调用组件上传方法
this.$refs.upload.submit();
let { uploadFiles } = this.$refs.upload;
// 1.个数校验
let fileLen = uploadFiles.length;
if (fileLen == 0) {
this.$message.error("请先选择文件!");
return false;
}
if (fileLen > 10) {
this.$message.error(`一次最多上传10个文件!`);
this.$refs.upload.clearFiles();
return false;
}
// 校验文件
let form = new FormData();
let fileNameArr = [];
let status = false;
uploadFiles.forEach((item, index) => {
// 2.格式校验
const imgSuffixReg = /(mp3|mp4|MP4|mpg|flv|doc|docx|xls|xlsx|ppt|pptx|pdf|jpg|JPG|jpeg|png|PNG|zip)$/;
const point = item.name.lastIndexOf(".");
const suffix = item.name.substr(point + 1);
const isImg = imgSuffixReg.test(suffix);
const isLt500M = item.size / 1024 / 1024;
let imgFlag = true;
if (!isImg) {
this.$message.error(
`请上传 mp3 mp4 mpg flv word excel ppt pdf jpg jpeg png zip 格式文件!`
);
imgFlag = false;
status = true;
}
// 3.大小校验
let sizeFlag = true;
if (isLt500M > 500) {
this.$message.error("上传文件大小不能超过 500MB!");
sizeFlag = false;
status = true;
}
// 符合条件加入formData
if (imgFlag && sizeFlag) {
form.append("fileUploads", item.raw);
fileNameArr.push(item.name);
}
});
form.append("parentId", this.parentId);
// 任意一个不符合规则都不上传,直接返回
if (status) {
this.$refs.upload.clearFiles();
return false;
}
// 调用接口是否文件重复
checkFj({
parentId: this.parentId,
fileNames: fileNameArr
}).then(res => {
if (res.code === 200) {
// 上传服务器
uploadFileApi(form).then(res => {
// 清空文件列表
this.$refs.upload.clearFiles();
if (res.code === 200) {
this.$message.success("上传成功!");
this.fetchDataList();
}
});
} else {
this.$refs.upload.clearFiles();
}
});
},
接口:

在技术路上探索的菜鸟,如有不足,欢迎大佬们指正!

浙公网安备 33010602011771号