antd upload上传组件如何获取服务端返回数据

对于antd的上传组件,根据官方文档的说明,上传成功后会自动解析服务端返回的数据,并将其设置为上传组件的fileList属性的一项。但有时候,我们需要手动获取服务端返回的数据,这时候可以利用 antdcustomRequest属性和 Promise 对象实现。

customRequest属性用于自定义上传行为,可以接收一个函数作为参数,该函数会在上传时被调用。

示例1:手动获取服务端返回数据

import { Upload, message } from 'antd';

const MyComponent = () => {
  const handleUpload = (file) => {
    return new Promise((resolve, reject) => {
      // 发起上传请求,返回 Promise 对象
      const formData = new FormData();
      formData.append('file', file);
      axios.post('/api/upload', formData).then(res => {
        // 上传成功后,手动将服务端返回值设置为当前文件的值
        file.response = res.data;
        resolve(file);
      }).catch(err => {
        message.error('上传失败');
        reject(err);
      });
    });
  };

  const handleChange = ({ fileList }) => {
    console.log(fileList[0].response); // 手动获取服务端返回的数据
  }

  return (
    <Upload customRequest={handleUpload} onChange={handleChange}>
      点击上传
    </Upload>
  );
};

在这个示例中,我们手动创建了一个 Promise 对象,并在其完成时将服务端返回值设置为当前文件的response属性。这样,在handleChange函数里,我们就可以手动获取fileList里每个文件的response属性,从而得到服务端返回的数据。

示例2:手动控制文件上传

import { Upload, Button } from 'antd';

const MyComponent = () => {
  const [isUploading, setIsUploading] = useState(false);
  const [fileList, setFileList] = useState([]);

  const handleUpload = () => {
    setIsUploading(true);
    Promise.all(
      fileList.map(file => 
        new Promise((resolve, reject) => {
          // 发起上传请求,返回 Promise 对象
          const formData = new FormData();
          formData.append('file', file);
          axios.post('/api/upload', formData).then(res => {
            // 上传成功后,手动将服务端返回值设置为当前文件的值
            file.response = res.data;
            resolve(file);
          }).catch(err => {
            reject(err);
          });
        })
      )
    ).then(files => {
      setIsUploading(false);
      setFileList(files);
      message.success('上传成功');
    }).catch(err => {
      setIsUploading(false);
      message.error('上传失败');
    });
  };

  const handleRemove = (file) => {
    const index = fileList.indexOf(file);
    const newFileList = fileList.slice();
    newFileList.splice(index, 1);
    setFileList(newFileList);
  }

  return (
    <>
      <Upload fileList={fileList} onRemove={handleRemove}>
        <Button disabled={isUploading}>选择文件</Button>
      </Upload>
      <Button disabled={isUploading} onClick={handleUpload}>上传</Button>
    </>
  );
};

在这个示例中,我们手动控制文件上传的过程,将上传按钮和文件列表分别放到了两个组件里。在点击上传按钮时,我们需要对每个文件发起一个上传请求,并使用Promise.all等待所有请求完成。在请求完成后,我们可以手动获取每个文件的服务端返回值,并将上传结果设置为当前文件的值。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:antd upload上传组件如何获取服务端返回数据 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • 如何下载旧版本的mysql

    如果您需要下载旧版本的MySQL,可以按照以下步骤进行操作。以下是如何下载旧版本的MySQL的完整攻略,包含两个示例说明。 步骤一:访问MySQL官方网站 访问MySQL官方网站(https://dev.mysql.com/downloads/mysql/)。 步骤二:选择要下载的MySQL版本 在MySQL官方网站上,可以找到所有可用的MySQL版本。选择…

    other 2023年5月9日
    00
  • 资源管理器FreeCommander详细使用图文教程

    资源管理器FreeCommander详细使用图文教程 什么是FreeCommander FreeCommander是一款免费的资源管理器软件,它可以用于替代Windows系统自带的资源管理器,提供更多优秀的功能和操作方式。 安装 在FreeCommander官网中下载安装包,按照提示进行安装即可。 界面介绍 FreeCommander的界面可以分为以下几个部…

    other 2023年6月26日
    00
  • python实现将docx文件转化为pdf文件

    以下是关于“Python实现将docx文件转化为pdf文件”的完整攻略,包含两个示例。 Python实现将docx文件转化为pdf文件 在Python中,我们使用Python-docx和PyPDF2库将docx文件转化为pdf文件。以下是将docx文件转化为pdf文件的详细攻略。 1. 安装Python-docx和PyPDF2库 在Python中,我们需要安…

    other 2023年5月9日
    00
  • springboot多环境配置文件及自定义配置文件路径详解

    Spring Boot多环境配置文件解释 Spring Boot支持多种环境配置,包括开发环境、测试环境和生产环境等。在不同环境下,可能需要配置不同的参数。因此,Spring Boot提供了多环境配置文件的支持,让我们可以轻松地在多个环境下使用不同的配置。 Spring Boot默认会使用application.properties或application.…

    other 2023年6月25日
    00
  • anaconda中piptensorflow特别慢

    Anaconda中pip安装TensorFlow特别慢 如果你在使用Anaconda进行Python开发并尝试使用pip来安装TensorFlow时发现速度特别慢,那么你不是一个人。在本文中,我们将探讨Anaconda中安装TensorFlow特别慢的原因及解决方法。 问题描述 使用Anaconda进行Python开发及包管理的用户都知道,使用pip来安装P…

    其他 2023年3月28日
    00
  • PythonCrashCourse 第三章习题

    下面是“PythonCrashCourse 第三章习题的完整攻略”的详细讲解,包括题目描述、解题思路和两个示例等方面。 题目描述 本题是 PythonCrashCourse 第三章的习题,要求编写一个程序,提示用户输入一个数字,并判断该数字是否是 10 的整数倍。如果是,则输出一条消息,指出这个数字是 10 的整数倍;否则,输出一条消息,指出这个数字不是 1…

    other 2023年5月5日
    00
  • ubuntu查看磁盘空间命令

    以下是“Ubuntu查看磁盘空间命令的完整攻略”的标准markdown格式文本,其中包含了两个示例: Ubuntu查看磁盘空间命令的完整攻略 在Ubuntu系统中,我们可以使用命令行来查看磁盘空间的使用情况。以下是Ubuntu查看磁盘空间命令的步骤。 1. 使用df命令 df命令是一种常用的查看磁盘空间使用情况的命令。以下是使用df命令的步骤: 打开终端。 …

    other 2023年5月10日
    00
  • 小米8怎么添加桌面工具?小米8自定义桌面插件教程

    小米8是一款功能强大的手机,用户可以自定义桌面,添加各种工具和插件,提高手机使用便捷性。本文将详细讲解小米8怎么添加桌面工具,以及小米8自定义桌面插件的教程。 添加桌面工具 小米8添加桌面工具的方法如下: 找到需要添加的工具图标,长按工具图标,将其拖动到桌面上,松开手指即可。例如,想在桌面上添加“计算器”工具,可以进入应用列表,长按计算器图标,将其拖动到桌面…

    other 2023年6月25日
    00
合作推广
合作推广
分享本页
返回顶部