美文网首页
react-antd项目中多文件上传限制

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

作者: fangdown | 来源:发表于2017-10-26 10:34 被阅读0次

    需求:一个附件列表,带上传功能,在上传时要求总附件数量不超过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项目中多文件上传限制

          本文链接:https://www.haomeiwen.com/subject/vnmhpxtx.html