Ant Design 框架upload组件上传之前发请求根据返回结果判断是否上传

第一步:在upload使用的组件中定义空数组(在所有的filelist赋值中只能为数组,不能为对象)

第二步:配置props里面的属性

const props = {
      name: 'file',
      beforeUpload: this.beforeUpload,
      fileList: this.state.fileList.slice(-1),
      onRemove: file => {
        this.setState(({ fileList }) => {
          const index = fileList.indexOf(file);
          const newFileList = fileList.slice();
          newFileList.splice(index, 1);
          return {
            fileList: newFileList,
          };
        });
      },
    };

beforeUpload方法:

beforeUpload = file => {
    const isExcel = file.name.split('.')[1] === 'xlsx';
    const isExl = file.name.split('.')[1] === 'xls';

    if (!isExcel && !isExl) {
      message.error('请上传xlsx 和 xls 类型的文件!');
      return false;
    }
    //对文件格式判断过后调用后端接口,返回结果为getCcpMarginExistsList
    this.props.getCcpMarginExists({ fileName: file.name });
    this.setState(() => ({
      fileList: [file],
    }));
    return false;
  };

第三步:对上传之前调用接口的返回数据进行是否上传的判断

const { getCcpMarginExistsList } = nextProps;
    if (getCcpMarginExistsList !== this.props.getCcpMarginExistsList) {
      if (_.get(getCcpMarginExistsList, 'retCode') !== '0') {
        message.error(_.get(getCcpMarginExistsList, 'message') || '请重新上传文件');
        this.setState({
          fileList: [],
        });
      }
      if (
        _.get(getCcpMarginExistsList, 'retCode') === '0' &&
        _.get(getCcpMarginExistsList, 'value') === true
      ) {
        this.setState({
          visible: true, // 弹出modal框,点击确定继续上传,点击取消放弃上传
        });
      }
      if (
        _.get(getCcpMarginExistsList, 'retCode') === '0' &&
        _.get(getCcpMarginExistsList, 'value') === false
      ) {
        this.handleUpload(); // 直接调用上传方法
      }
    }

上传方法:

handleUpload = () => {
    const { uploadQuery } = this.props;
    const { fileList } = this.state;
    const formData = new FormData();
    fileList.forEach(file => {
      formData.append('file', file);
    });
    const action = `${window.location.origin}${uploadQuery}`;
    reqwest({
      url: action,
      method: 'post',
      processData: false, // 用于对data参数进行序列化处理
      data: formData,  // data必须为数组,否则会报错
      success: result => {
        this.setState({
          fileList, // fileList赋值必须为数组,否则会报错
        });
        if (String(result.retCode) === '1') {
          message.error(result.message || '上传失败!', 5);
        } else {
          message.success(result.message || '文件上传成功!', 5);
        }
      },
      error: () => {
        this.setState({
          fileList: [], // fileList赋值必须为数组,否则会报错
        });
      },
    });
    this.setState({
      visible: false,
    });
  };

Modal框:

        <Modal // POSTTRADE-10968 CCP保证金页面功能 待发布
          title="温馨提示"
          visible={this.state.visible}
          onOk={this.handleUpload}
          onCancel={this.handleCancel}
          maskClosable="true"
        >
          <h3>已存在相同日期保证金信息,是否覆盖?</h3>
        </Modal>
handleCancel = e => {
    this.setState({
      visible: false,
      fileList: [],
    });
  };

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Ant DesignUpload组件的onChange返回的状态回调包含了一些重要的属性,我们可以根据这些属性来判断上传状态。 以下是一个示例代码,用于判断上传状态: ```javascript import { Upload, message } from 'antd'; import { LoadingOutlined, PlusOutlined } from '@ant-design/icons'; const UploadComponent = () => { const [loading, setLoading] = useState(false); const [imageUrl, setImageUrl] = useState(''); const handleChange = (info) => { if (info.file.status === 'uploading') { setLoading(true); return; } if (info.file.status === 'done') { setLoading(false); setImageUrl(info.file.response.url); message.success('上传成功!'); } if (info.file.status === 'error') { setLoading(false); message.error('上传失败!'); } }; const uploadButton = ( <div> {loading ? <LoadingOutlined /> : <PlusOutlined />} <div style={{ marginTop: 8 }}>上传</div> </div> ); return ( <Upload name="avatar" listType="picture-card" className="avatar-uploader" showUploadList={false} action="/api/upload" onChange={handleChange} > {imageUrl ? ( <img src={imageUrl} alt="avatar" style={{ width: '100%' }} /> ) : ( uploadButton )} </Upload> ); }; ``` 在这个示例代码中,我们通过useState来保存上传状态,包括loading和imageUrl。在handleChange回调中,我们根据上传状态来更新loading和imageUrl,并显示相应的提示信息。例如,当上传成功时,我们更新imageUrl,并显示一个上传成功的提示信息。 此外,我们还通过Ant DesignUpload组件来实现文件上传。在这个组件中,我们设置了上传的名称、上传类型、上传地址和状态回调等属性。其中,onChange回调中的info参数包含了文件的上传状态、文件名、文件大小、文件类型等信息,我们可以通过这些信息来判断上传状态。 综上所述,我们可以通过onChange返回的状态回调来判断Ant DesignUpload组件上传状态,并根据上传状态来更新界面和显示提示信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值