react-antd项目中多文件上传限制

需求:一个附件列表,带上传功能,在上传时要求总附件数量不超过3个
分析:在上传时进行before验证,在onChange函数中进行计数清零及文件处理
场景:
1,没有文件,上传数量《=3,可一次性传完
2,没有文件,上传数量》3,提示数量超过3个,不上传,列表为空
3,有文件数量为1,上传数量《=2,可一次性传完
4,有文件数量为1,上传数量》2,提示数量超过3个,不上传,列表不变

基于以上场景,我们的思路是,根据antd api的特性,当选择好文件之后,先执行beforeUpload钩子,有几个文件调用几次,这样我们可以定义个全局变量beforeUploadCounter来统计,onChange函数是IO异步操作之后的的钩子函数
思路是:
1,计算beforeUploadCounter次数
2,计算当前文件列表数量this.state.fileList.length
3,当上传文件个数+已有附件个数 超过3个时,设置继续上传变量continueUpload为false
4,在onChange钩子函数中,判断continueUpload 是否为false,如果为false,return false,不继续后面的操作
5,由于beforeUploadCounter是全局函数,在下一次选择上传的时候需要把它清零,以免影响计算。
代码

let beforeUploadCounter = 0; // 上传的次数,可以统计到多少个文件
let allFilesLength = 0; //上传文件个数+当前文件列表个数
let continueUpload = true; //是否继续上传
beforeUpload(file) {
        continueUpload = true;
        beforeUploadCounter++
        allFilesLength = beforeUploadCounter + this.state.fileList.length
        continueUpload = allFilesLength < 4;
        if (allFilesLength === 4) {
            Modal.error({
                title: '上传的文件不能超过3个,请重新选择'
            });
        }
        if (allFilesLength >= 4) {
            return false
        }
    },
fileChange(info) {
        beforeUploadCounter = 0;
        if (!continueUpload) {
            return false
        }
  //业务逻辑。。。省略
this.setState({ fileList });
}

你可能感兴趣的:(react-antd项目中多文件上传限制)