当前位置:   article > 正文

react使用antd的上传组件实现文件表单一起提交_antd上传文件 表单提交

antd上传文件 表单提交

最近在刚刚开始使用react做项目,非常不熟练,非常小白。小白同学可以阅读了,因为我会写的非常简单,直白。

项目中需要实现表单中带附件提交,上传文件不单独保存调接口。

  1. import { Form, Button, Upload } from 'antd';
  2. import { UploadOutlined } from '@ant-design/icons';
  3. const normFile = (e) => {
  4. console.log('Upload event:', e);
  5. if (Array.isArray(e)) {
  6. return e;
  7. }
  8. return e && e.fileList;
  9. };
  10. const Demo = () => {
  11. const onFinish = (values) => {
  12. console.log('Received values of form: ', values);
  13. };
  14. return (
  15. <Form
  16. name="validate_other"
  17. onFinish={onFinish}
  18. initialValues={{
  19. 'input-number': 3,
  20. 'checkbox-group': ['A', 'B'],
  21. rate: 3.5,
  22. }}
  23. >
  24. <Form.Item
  25. name="upload"
  26. label="Upload"
  27. valuePropName="fileList"
  28. getValueFromEvent={normFile}
  29. >
  30. <Upload name="logo" action="/upload.do" listType="picture">
  31. <Button icon={<UploadOutlined />}>Click to upload</Button>
  32. </Upload>
  33. </Form.Item>
  34. </Form>
  35. );
  36. };
  37. ReactDOM.render(<Demo />, mountNode);

这里是一个表单里面包含了一个上传文件功能。(其实这里的代码就是Antd官方文档的例子,我只进行了删除多余部分,别的都是原样放着)。

下面做一下解释。

首先我们要思考怎么实现让文件不要自动上传。antd文档是有给一个方法的就是beforeUpload,当beforeUpload方法返回false时就会停止文件的上传。

以上就可以停止文件的自动上传。接下来,我们考虑怎么把上传的文件获取并存在传给后端的参数中。

这部分代码就是上传代码的方法,因为我们需要上传文件和表单一起提交。所以我们在这个方法里进行一些修改,把文件存在formData对象里。这里先说明一下formData对象,主要就是用来传文件给后端用的。

先new一个formData对象,在把文件append进去,这样就已经把上传的文件存在了formData里。

表单中其它数据也可以通过同种方法存在formData中,把formData传给后端即可。

此时还有一个需要注意的问题。

fetch(url, {

        //fetch请求

        method: 'POST',

        body: formData,

})

 axios({ //axios
        method: 'post',
        url: url,
        data: formData,
    })
    .then(function (response) {
        console.log(response);
    })
    .catch(function (error) {
        console.log(error);
    });

一定要设置了,才可以传参数成功,不然调用接口的时候是不会成功带参数的。

什么样子是成功带了参数呢,可以在相关页面点击F12查看,network,最下方会有Form Data,一栏,会展示所有传过去的参数。

最终代码如下:

  1. import { Form, Button, Upload } from 'antd';
  2. import { UploadOutlined } from '@ant-design/icons';
  3. const normFile = (e) => {
  4. console.log('Upload event:', e);
  5. const formData = new FormData();
  6. formData.append('file', e.file);
  7. if (Array.isArray(e)) {
  8. return e;
  9. }
  10. return e && e.fileList;
  11. };
  12. const beforeUpload = ({fileList}) => {
  13. return false;
  14. }
  15. const Demo = () => {
  16. const onFinish = (values) => {
  17. console.log('Received values of form: ', values);
  18. };
  19. return (
  20. <Form
  21. name="validate_other"
  22. onFinish={onFinish}
  23. >
  24. <Form.Item
  25. name="upload"
  26. label="Upload"
  27. valuePropName="fileList"
  28. getValueFromEvent={normFile}
  29. >
  30. <Upload name="logo"
  31. beforeUpload={beforeUpload}
  32. >
  33. <Button icon={<UploadOutlined />}>Click to upload</Button>
  34. </Upload>
  35. </Form.Item>
  36. </Form>
  37. );
  38. };
  39. ReactDOM.render(<Demo />, mountNode);

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/339115
推荐阅读
相关标签
  

闽ICP备14008679号