今天遇到一个问题,客户要求多文件逐个上传,因为如果同时上传会出现高并发的情况,带宽不一定允许,所以采用了逐个下载,自己用的是element框架,但是得分两个按钮才行(先选择文件,再有一个上传按钮);所以最终使用了原生的方法,方法如下:
注意点:1.需要考虑到超时的问题;2.获取的文件集合是个JSON,并不是数组,所以forEach map这种没法用
- HTML代码块
<input type="file" id="file" @change="jsUp" multiple>
- Javascript代码块
jsUp() {
var files = document.querySelector("#file").files;
let list = [];
filesAll = files;
this.fileLength = filesAll.length;
this.fileL = filesAll.length;
this.progressFlagMore = true; // 显示进度条
this.forB();
},
forB() {
this.setProgress();//可忽略
if (this.fileLength > 0) {
this.forUpload();
} else {
this.progressFlagMore = false; // 显示进度条//可忽略
setTimeout(() => {//可忽略
this.fileN = 0;
this.fileL = 0;
this.fileR = 0;
}, 100);
this.getList(1);//可忽略
}
},
forUpload() {
let file = filesAll[0];
let formData = new FormData();
formData.append("file", file);
formData.append("flag", "ywj");
formData.append("typeId", this.tabsId);
formData.append("organizationId", this.companyValue);
return request({
url: "/file/fileUpload",
method: "post",
data: formData,
timeout: 10000000000,
headers: {
"Content-Type": "multipart/form-data",
Token: getToken(),
},
})
.then((res) => {
if (res.code == 0) {
this.$message({
type: "success",
message: "上传成功!",
});
this.fileN++;
this.fileLength--;
this.forB();
}
})
.catch((err) => {
this.fileLength--;
this.fileR++;
this.forB();
});
},