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

yizhihongxing

对于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日

相关文章

  • android跑马灯出现重复跳动以及不滚动问题的解决方法

    针对”android跑马灯出现重复跳动以及不滚动问题”,我提供以下解决方法: 1. 出现重复跳动的解决方法 当我们在开发过程中,如果遇到出现跑马灯文字出现重复跳动的问题时,可以采用以下两种方法: 1.1 设置为单行显示 通过设置文本控件为单行显示可以避免跑马灯出现重复跳动的问题。 <TextView android:id="@+id/text…

    other 2023年6月27日
    00
  • 详解Element-ui NavMenu子菜单使用递归生成时使用报错

    当使用Element-ui的NavMenu组件递归生成子菜单时,可能会出现一些报错,本攻略将详细讲解如何解决这些报错。 问题1:Cannot read property ‘children’ of undefined 在递归生成NavMenu子菜单时,如果当前菜单项没有children属性,即此菜单项没有子菜单,那么在尝试访问这个菜单项的children属性…

    other 2023年6月27日
    00
  • iPhone13内存不够怎么解决 iPhone13显示内存不足怎么办

    iPhone 13内存不够的解决方法 如果你的iPhone 13显示内存不足的错误信息,不要担心,有几种方法可以解决这个问题。下面是一些解决iPhone 13内存不够的方法: 1. 清理iPhone 13上的无用数据 清理无用数据是解决内存不足问题的第一步。以下是一些可以清理内存的方法: 删除不需要的应用程序:打开iPhone 13的主屏幕,长按不需要的应用…

    other 2023年8月1日
    00
  • 我是这么安装使用.net5框架的

    下面是关于如何安装和使用.NET 5框架的完整攻略。 背景 .NET 5是一个跨平台的开源框,用于构高性能、可扩展的Web应用程序、桌面应用程序和动应用程序。本攻略将介绍如何在Windows、Linux和macOS上安装和使用.NET 5框架。 步骤 1. 下.NET 5 SDK 首先,我们需要下载.NET 5 SDK。可以以下链接下载: https://d…

    other 2023年5月9日
    00
  • h3c交换机mac地址绑定、三层交换机固定ip上网、三层交换机端口配置ip地址的方法

    H3C交换机MAC地址绑定 在H3C交换机上,可以通过MAC地址绑定来限制特定设备的网络访问。下面是进行MAC地址绑定的步骤: 登录到H3C交换机的管理界面。 进入交换机的全局配置模式,输入以下命令: configure terminal 进入接口配置模式,选择要进行MAC地址绑定的接口,例如接口GigabitEthernet1/0/1,输入以下命令: in…

    other 2023年7月31日
    00
  • Android 监听apk安装替换卸载广播的实现代码

    以下是实现Android监听APK安装、替换和卸载广播的完整攻略: 步骤1:创建广播接收器 首先,我们需要创建一个广播接收器来监听APK的安装、替换和卸载事件。可以按照以下步骤进行操作: 在AndroidManifest.xml文件中声明广播接收器: xml <receiver android:name=\”.MyBroadcastReceiver\”…

    other 2023年10月14日
    00
  • Win10 Build 19045.2908 预览版更新补丁KB5025297(附更新修复内容汇总)

    Win10 Build 19045.2908 预览版更新补丁KB5025297攻略 简介 Win10 Build 19045.2908 预览版更新补丁KB5025297是针对Windows 10操作系统的最新更新补丁。该补丁旨在修复一系列已知问题和改进系统的稳定性和性能。本攻略将详细介绍如何安装和应用该更新补丁,并提供一些示例说明。 步骤 步骤一:检查系统版…

    other 2023年8月3日
    00
  • 鸿蒙系统开发者模式如何进入?鸿蒙系统进入开发者模式的方法

    进入鸿蒙系统的开发者模式,需要经过以下步骤: 打开鸿蒙系统的设置应用:在主屏幕或应用列表中找到“设置”应用,点击进入。 找到“系统”选项:在设置应用中,向下滑动屏幕直到找到“系统”选项,点击进入。 进入“关于手机”页面:在“系统”页面中,向下滑动到最底部,点击“关于手机”进入详细信息页面。 找到“版本号”选项:在“关于手机”页面中,找到“版本号”选项,连续点…

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