React 文件上传实现

需求:只能导入pdf文件,文件导入后点击确定按钮调接口文件上传。

组件库: antd

 代码:

{/* 导入报告弹窗 */}
      <Modal
        width={360}
        className='report-modal'
        title="导入报告"
        maskClosable={false}
        visible={importReportVisible}
        onOk={importReportHandeOk}
        onCancel={changeImportReportVisible}
      >
        <Form className='report_box report_box_import' form={importReportForm} name="importReportForm">
          <Form.Item
            name="month"
            label="月份"
            rules={[{ required: true, message: '请选择生成月份' }]}
          >
            <Select
              placeholder='请选择月份'
              options={monthlyList}
            />
          </Form.Item>
          <Form.Item
            name="remark"
            label="备注"
          // rules={[{ required: true, message: '请填写备注信息' }]}
          >
            <Input.TextArea rows={2} placeholder='请输入备注信息' />
          </Form.Item>
          <Form.Item
            name="upload"
            label="导入文件"
            valuePropName="fileList"
            getValueFromEvent={(e) => {
              if (Array.isArray(e)) {
                return e;
              }
              return e && e.fileList;
            }}
            extra='支持扩展名: .pdf'
            rules={[{ required: true, message: '请导入文件' }]}
          >
            <Upload
              name="report"
              action={''} // 上传的地址
              accept='.pdf'
              maxCount={1}
              beforeUpload={beforeExportReport}
              onChange={exportReportChange}
            >
              <Button>导入</Button>
            </Upload>
          </Form.Item>
        </Form>
      </Modal>
// 导入报告
  const importReportHandeOk = () => {
    importReportForm.validateFields().then((value) => {
      const { month: belongDate, remark, upload } = value;
      const param = { brokerId, remark, belongDate, file: fileList };
      const formData = new FormData();
      for (const key in param) {
        formData.append(key, param[key] ?? '');
      }      
      fetch(myURL + '/report/upload', {
        method: 'POST',
        body: formData,
      }).then(res => {
        if (res.status === 200) {
          message.success('导入成功!');
        } else {
          message.error('导入失败!');
        }
      }).catch(() => {
        message.error('导入失败!');
      })
    }).catch(err => console.log(err));
  };

遇到的问题:

使用axios进行请求的时候后端一直获取不到formData的值,网上看了很多方法,设置请求头也不生效,但是当我将withCredentials设置为true的时候,可以获取到formData的值,这时候又出现了另一个问题就是跨域,需要后端同学去修改。(withCredentials使用效果可参考:ajax中的withCredentials使用效果_江木的博客-CSDN博客_withcredentials)

所以我改用fetch请求去实现,达到了想要的效果

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值