需求是批量上传一个文件夹中的文件,当文件夹中的文件上传完成之后进行一个上传完成的提示
<el-dropdown class="ml-1" size="medium"
@command="BatHandle">
<el-button icon="el-icon-s-operation" >
批量操作<i class="el-icon-arrow-down el-icon--right"></i>
</el-button>
<el-dropdown-menu slot="dropdown">
<a-upload
name="file"
:showUploadList="false"
:multiple="true"
:directory="true"
:before-upload="beforeUploadFile"
:customRequest="__upload_folder_request"
>
<el-dropdown-item command="pickup">
<i class="el-icon-files"></i> 批量挂接
</el-dropdown-item>
</a-upload>
</el-dropdown-menu>
</el-dropdown>
customRequest通过覆盖默认的上传行为,可自定义自己的上传实现
- 以下是js相关方法的代码,可根据实际情况自行定义
/**
1. @description:
2. 上传文件夹之前方法
3. @param {*}
4. @return {*}
*/
beforeUploadFile(file){
const formData = new FormData()
formData.append('file', file)
formData.append("tableid" ,this.defaultActive)
let a = new Promise((resolve,reject)=>{
this.$api.post(`/api/notoken/receivequanwen`, formData )
.then( res=>{
//没上传一个文件执行一次方法
let code = res.code;
if( code == 0 ){
resolve()
}
})
})
this.arrList.push(a);//每次上传都向定义的数组中推进去一个上传的方法
},
__upload_folder_request(){
if(this.arrList.length==0)return
Promise.all(this.arrList).then(()=>{
this._query_data();//刷新上传成功后的表格数据
this.successTit('挂接成功')
}).catch(()=>{
})
this.arrList=[];
},
- 需要了解的是upload假如上传十个文件
- 他会先执行十个beforeUpload的方法,然后再执行十个自定义的上传方法,所以我们要监听最后一个文件执行完成后进行相关的信息提示
- 就只让信息提示和请求新数据的方法执行一次即可;