【React】Antd Upload组件的常用属性以及在表单Form中的使用

Antd - 上传图片 & 裁剪图片 首先取消默认上传时的接口,在beforeUpload方法return false,来阻止默认上传。即【Upload上传有个action的坑,就是你选择文件之后自动调用地址然后就会执行上传接口,如果不取消会一直有一个失败请求,但不影响主体流程】上传前文件格式校验在上传文件校验或onchange方法中获取上传的文件,进行自定义接口请求传递});if (!message.error('请上传png、jpeg、jpg、webp格式图片');isLt2M) { 阅读详情

目录

一.常见属性的介绍

二.上传文件后如何点击文件就自动下载对应文件呢?

三.upload在表单中如何做到数据回显,即配置初始化文件列表数据?

四.如何修改文件列表的样式达到以下效果, 不同后缀名的文件显示对应的图标,超过3行显示滚动条,空间上显示3.5行?


一.常见属性的介绍

1.beforeUpload

文件上传之前的钩子,可以通过第一个形参file查看上传的文件信息(例如查看文件名、文件大小等进行校验),通常我们可以在这个函数中进行文件信息的校验,例如查看用户上传的文件名是否合法,文件大小是否超出限制等等,如果不想要上传这个文件可以返回“Upload.LIST_IGNORE”,返回false或者Promise.reject(file),文件的上传状态status为error,返回Promise.resolve(file)则返回对应的文件信息

  // 示例
  const beforeUpload = (file) => {
    console.log('beforeUpload:', file, file.name, file.name.indexOf(','));
    const isLt2M = file.size / 1024 / 1024 <= 2;
    if (!isLt2M) {
      // message.error('图片不能大于 2MB!');
      return Upload.LIST_IGNORE;
    }
    if (file.name.indexOf(',') !== -1) {
      // message.error('文件名不能含,');
      return Upload.LIST_IGNORE;
    }
    return Promise.resolve(file);
  };

2.defaultFileList

默认已经上传的文件列表,值得注意的是,当我们给Upload组件设置这个属性的时候,如果没有继续上传或删除文件,表单Form提交的时候Upload里面的数据是undefined

3.fileList

已经上传的文件列表,值得注意的是,表单提交的时候就是返回fileList内的数据

4.action

文件上传的路径,上传成功后文件信息会在fileList中显示

5.onChange

上传文件时的回调,通常可以在这里获取第二个形参fileList,用state保存结果

二.上传文件后如何点击文件就自动下载对应文件呢?

可以在Upload的onChange函数对第二个形参fileList进行map设置每一个文件的url

在Form表单中可以通过props.onChange来改变form表单中Upload组件这一项的返回值

  const handleOnChange = (info) => {
    // 通过status判断文件已上传成功
    for (const file of info.fileList) {
      if (file.status !== 'done') return;
    }

    // 在Form表单中可以通过props.onChange来改变form表单中Upload组件这一项的返回值
    props.onChange &&
      props.onChange(
        info?.fileList?.map((item) => {
          return {
            ...item,
            // 文件下载的路径可以和后端进行沟通 我们是/download/ + 文件id 为下载地址
            url: '/download/' + item?.response?.record?.fileId,
            fileId: item?.response?.record?.fileId,
            fileName: item?.response?.record?.fileName,
          };
        }),
      );
  };

三.upload在表单中如何做到数据回显,即配置初始化文件列表数据?

通过设置defaultFileList属性,其中uid要求唯一,status应该写done代表已经下载完成,name是文件名,url即点击文件时触发下载操作

const defaultFileList = [
  {
    uid: '1',
    name: 'xxx.png',
    status: 'done',
    url: 'http://www.baidu.com/xxx.png',
  },
  {
    uid: '2',
    name: 'xxxx.png',
    status: 'done',
    url: 'http://www.baidu.com/xxxx.png',
  },
]

倘若要在Form表单中进行正确回显,需要注意的是我们应当监听传入defaultFileList的改变,将defaultFileList的值返回给表单Form

  useEffect(() => {
    // 在Form表单中可以通过props.onChange来改变form表单中Upload组件这一项的返回值
    props.onChange && props.onChange(props.defaultFileList);
  }, [defaultFileList]);

四.如何修改文件列表的样式达到以下效果, 不同后缀名的文件显示对应的图标,超过3行显示滚动条,空间上显示3.5行?

需求1 不同后缀名的文件显示对应的图标

需求2 超过3行显示滚动条,空间上显示3.5行

解决1

文件列表中span元素中有title属性,我们可以根据这个title属性,利用属性选择器,设置伪元素

默认图标的样式通过display: none令其隐藏

    .ant-upload-text-icon {
      display: none;
    }

    .ant-upload-list-item-name {
      position: relative;
      width: 216px;
      height: 32px;
      line-height: 32px;
      font-size: 12px;
      padding-left: 42px;

      &::after {
        position: absolute;
        content: '';
        background-size: auto;
        display: block;
        width: 20px;
        height: 20px;
        top: 6px;
        left: 10px;
      }

      &[title$='.xlsx'],
      &[title$='.xls'] {
        &::after {
          background-image: url(./img/img-excel.png);
        }
      }

      &[title$='.pdf'] {
        &::after {
          background-image: url(./img/img-pdf.png);
        }
      }
    }

 解决2

max-height: 3.5行高度 + overflow:auto

    .ant-upload-list.ant-upload-list-text {
      width: 100%;
      max-height: 114px;
      display: flex;
      flex-wrap: wrap;
      justify-content: flex-start;
      height: auto;
      overflow: auto;
    }

    .ant-upload-list-item.ant-upload-list-item-done.ant-upload-list-item-list-type-text {
      height: 32px;
    }

有问题欢迎在评论区提出讨论,谢谢!

ant-design Upload上传组件使用 编辑功能图片回显 因为我们要做的是编辑回显获取的数据形式为[{ url: 图片路径, uid: 图片标识 }]导致方式图片显示数组fileLists导致自动上传无法返回路径,使用beforeUpload事件不使用onChange是因为,onChange做图片上传会和onRemove事件冲突,当删除图片时两个事件会一起执行所以我们使用beforeUpload避开事件冲突。当我们使用 ant-design Upload上传组件进行编辑功能回显时,不能使用使用 action上传,自己手续一个自定义上传因此我们要这样设置。 阅读详情

相关推荐

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

最近在刚刚开始使用react做项目,非常不熟练,非常小白。小白同学可以阅读了,因为我会写的非常简单,直白。 项目中需要实现表单中带附件提交,上传文件不单独保存调接口。 import { Form, Button, Upload } from 'antd'; import { UploadOutlined } from '@ant-design/icons'; const normFile = (e) => { console.log('Upload event:', e);

wangshuai33的博客 5291

antd Upload手动上传(react)

情况介绍 在antd官方提供的upload组件案例中,都使用了action属性直接上传,唯一手动上传的一个例子(如下图)也不够好用,可能不能满足项目的需求,所以我们需要对其进行一些修改,并加入一些别的方法。 我们经常会使用antd的form表单上传数据,有时就会需要同时上传图片。所以在这里我们需要实现的是,前端页面上传多张图片时,先存储在前端,当表单上传时,和表单数据一起上传到后端。 实现方法 1.初始化 首先,在最前面引入upload组件, import { Button, Form, Input, m

小陈的博客 9185

antd 里面的Upload图片上传

Antd 里面的Upload import React,{useState} from 'react'; import { Upload, Icon, message,Spin } from 'antd'; import serviceApi from '@/utils/api'; import {MessageTip} from '@/utils/tools.js' import '....

欢迎来到我的频道~ 1955

upload组件多个文件上传、自定义文件列表显示及手动上传

1.多选和单选 1)由multiple属性来控制 2)保存state时,注意存的List内容即可 //参数 uploadProps={ name:'file', //接口入参名 accept:'.gz', //接受上传的文件类型 action:document.location.prot+'//'+location.host+'/apis', //接口url headers:{ authorization:localStage.getItem('

Realizee的博客 4895

antd Upload组件表单校验问题解决方案

表单校验是前端开发中的核心机制,通过监控组件值变化来确保数据有效性。在React生态中,antd的Form组件提供了完善的校验体系,但当遇到Upload文件上传组件时,由于异步上传特性与常规表单控件的工作模式差异,常会出现校验状态不同步的问题。本文深入分析antd Upload组件与Form联动的技术原理,揭示校验失效的根本原因在于value/onChange协议不匹配,并提供三种实用解决方案:手动状态同步、valuePropName配置和自定义表单控件开发。针对企业级应用场景,还特别探讨了大文件上传、多文

weixin_29006701的博客 267

使用海康机器人的SDK进行DWS开发时如何筛选不同类型的相机

使用MVIDCodeReader、MvCodeReaderSDK、MvVolMeasureSDK联合开发时,通常会做一些设备枚举列表,但是不同类型的设备需要枚举在不同的列表中,便于软件使用者配置参数,例如: 如何保证枚举出来的设备是可以选择的对应的设备。我们通常枚举出来的是这样的: 解决办法 在联合开发中,我们发现,只有MvVolMeasureSDK的枚举设备接口EnumStereoCamEx可以正确的只枚举出网络内的体积设备,其余的MVIDCodeReader、MvCodeReaderS

qq_29123967的博客 2732

antd upload和form结合使用

做了个antd的上传简单封装,很烦。主要用的方法就是使用customRequest 这个覆盖上传组件的默认上传,实现自定义上传。有的地方可能比较low 因为我不知道其他方法。。 import React from 'react' import {Icon,Upload,Modal} from 'antd' import { uploadimg } from '../../api/login'...

沙鑫741的博客 1万+

【Python实战解析】从数据爬取到房价预测:一个完整的数据科学项目流程拆解

本文详细拆解了一个完整的Python数据科学项目流程,从爬取长沙二手房数据到房价预测模型构建。通过实战案例,介绍了数据爬取、清洗、可视化及模型优化的关键技巧,帮助开发者掌握Python在数据分析中的应用,提升程序开发能力。

weixin_30379531的博客 412

antd中使用Form控件和Upload控件对图片上传并进行验证

在antd中使用Form

ThisEqualThis的博客 7508

国民技术N32G45X低功耗问题之更改全局变量和栈在RAM中的地址

最近项目中用的MCU是国民技术的N32G45X,MCU的资源很丰富,RAM也很大,配套的库和例程也比较全,用起来还是不错的,但是在调试低功耗的时候还是费了不少劲。 首先由于项目低功耗需要,只能选择停机模式2(STOP2)。根据数据手册的描述,在此模式下外部低速时钟开启, RTC运行, R-SRAM保持,所有I/O状态保持,独立看门狗处于关闭状态,25℃的条件下电流为10个微安。 用的这款MCU的RAM是144KB,分为SRAM(128KB)和R-SRAM( Retention SRAM – 16KB),如果

狂想家 2486

NVIDIA驱动装好了,Gazebo为啥还是卡?手把手教你用optirun搞定GPU加速

本文详细解析了NVIDIA驱动安装后Gazebo仍卡顿的原因,并提供三步精准诊断与GPU加速实战方案。通过optirun快速启用GPU加速,解决OpenGL与显示服务器的配置问题,显著提升仿真性能。适用于ROS、PX4等开发环境,帮助用户充分利用显卡性能。

weixin_30379531的博客 465

前端学习-Antd 组件库基础

一.通用组件 1. Icon 图标,用于语义化的表示一些业务场景,比如:购物车、收藏夹、搜索、重置。 典型场景: 方向性图标 提示建议性图标 编辑类图标 数据类图标 品牌和标识 网站通用图标 2. Button 按钮用于开始一个即时操作。 典型场景: 跳转页面 唤起弹窗 触发行为:提交表单;删除;下载文件;搜索 二.布局组件 三.数据展示组件 四.反馈类组件 五.数据录入组件 ...

qq_48772498的博客 1万+

Nvidia Isaac Sim安装与配置 入门教程 2024(2)

Isaac Sim 安装和配置教程将指导用户完成从下载软件到设置和运行仿真的全过程。教程内容包括安装必要的依赖项、配置系统环境、配置Omniverse环境以及调试和优化仿真环境的步骤。通过详细的操作步骤和图文并茂的说明,用户可以快速上手 Isaac Sim,构建出高质量的机器人仿真环境,实现其研究和应用目标。

m0_56661101的博客 2万+

antd form+upload把上传后的文件删除后,表单校验失效了

antd form+upload把上传后的文件删除后,表单校验失效了

weixin_44258574的博客 2398

避坑指南:微信小程序蓝牙广播在iOS上的那些‘坑’(附serviceUuids传值解决方案)

本文深入解析微信小程序蓝牙广播在iOS平台上的开发难点,特别是`serviceUuids`传值解决方案。通过对比iOS与安卓的蓝牙协议实现差异,提供实战编码策略和硬件端配合方案,帮助开发者有效规避兼容性问题,提升蓝牙外围设备开发效率。

weixin_30316097的博客 423

UE4载具性能调优指南:从参数设置到实战优化

本文详细解析了UE4载具性能调优的关键技巧,从WheeledVehicle类构建到轮子参数、传动系统设置,再到物理属性与操控调校。通过实战案例分享,帮助开发者优化载具的速度、加速度等核心性能,提升游戏体验。特别适合需要精细调校载具物理特性的开发者参考。

weixin_29019241的博客 469

antd Upload组件表单校验异常问题排查经验总结

核心思路:判断pictureUrl字段值是否为本地路径,若为本地路径则判定校验失败。当时默认pictureUrl为数组格式(误判多文件场景),因此在校验规则中添加validator,判断数组中的文件url是否包含本地路径特征(如file://、:\)。问题暴露:用户反馈选择1M的正常本地图片时,未点击保存就触发校验错误。经排查发现,正常本地文件的路径(如c:/1.jpg)也被自定义规则拦截,且错误地将单文件场景的pictureUrl(实际为字符串)按数组处理,导致校验逻辑完全偏离预期。

java小白翻身 690

数据分析案例-电脑笔记本价格数据可视化分析3

本文基于Kaggle笔记本数据集(1303条记录,13个变量),使用Python进行数据可视化分析。通过自定义函数预处理了CPU频率、内存类型等关键特征,利用Seaborn和Matplotlib绘制了品牌分布、内存类型占比、价格影响因素等可视化图表。研究发现:1)Dell和Lenovo市场份额最大;2)SSD是主流存储类型;3)高RAM配置普遍采用SSD;4)Intel处理器占据绝对优势。分析揭示了不同品牌、配置与价格的关系,为消费者购买决策和市场策略制定提供了数据支持。

m0_64336780的博客 1万+

React +Antd 表单动态添加文件上传

antd表单和上传组件 如果对antd的From和Upload组件不太熟悉,推荐去官网上先阅读下API。 Antd 本项目采用3.26.16版本 需求描述 表单项操作提示中,每个操作包含一个文本输入框,三个文件上传,还包含提示信息,每个提示信息,包含一个文本输入框,一个音频文件上传。提示信息可以动态增加和删除。操作提示也同理。文件回显时,通过返回的数组进行重新渲染。通过getFieldDecorator定义存储数组的名字,initialValue设置默认值。getFieldDecorator用于和表单进行双

快跑吧求求了 1990

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

记录React项目中使用antd遇到的几个难搞的问题

1:antd4.0中Form组件initialValues 4已经不允许从setState 动态更新。 解决方法: 在类组件中通过: *formRef = React.createRef()* //创建Form的ref 在对应的Form组件的标签中添加上 *ref={this.formRef}* //创建ref 随后可以在想控制表单初始值的方法值使用 : **this.formRef.current.setFieldsValue({'对应的Form.Item的name的值':'想赋予的初始值'})*

weixin_45902966的博客 3830

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

TypeScript结合React全家桶(antd、axios、Nextjs)的一些类型总结

TypeScript结合React、Vue、express的一些类型总结(一些常用自带的类型) 1.React类型总览(包括React本身、router、antd的类型) 1.1 React本身常用类型

mackJun的博客 8348

antd中如何给form表单做数据的返显

在使用Ant-DesignUI库中的Form组件时,怎样在编辑页面时将之前保存过的数据返显在页面? 思路: 1、在componentDidMount生命周期中调用api获取后台数据; 2、通过form的setFieldsValue()方法将后台数据绑定到Form表单控件中。 注意:使用 getFieldsValue, getFieldValue, setFieldsValue 等时,应确保对应的...

ThisEqualThis的博客 6163

React常用组件封装及使用

react组件封装

林靖焙的博客 908

react antd实现upload上传文件前form校验,同时请求带data

如果直接使用antd的Upload组件,一点击文件选择的窗口就打开了,哪怕在Button里再加点击事件,也只是(几乎)同时处理两个方法,beforeUpload更是不行,文件都选择完了才执行。又看到一篇文章,可以更优雅地监听form,不用再使用onChange方法和useState,改完发现自己项目antd版本太低了用不了,从。改成react写法,把除了文件以外的payload获取放到beforeUpload里。最近的需求,两个下拉框是必填项,点击上传按钮,如果有下拉框没选要有提示,如图。

six66667的博客 2063

antd的form组件配合upload组件的使用。

在实际的业务场景中,form表单里面提交upload是一个非常普遍的应用场景。这里记录下,自己使用form表单,upload图片的代码。话不多说 ,直接上代码。 封装一下upload组件 import * as React from 'react'; import { Icon, Modal, Upload } from 'antd'; ...

weixin_34112208的博客 3750

antd上传文件到服务器,Antd 4 Upload 图片上传(前端篇)

Antd 4 Upload 图片上传(前端篇)简介记录一下第一次使用 Ant Design 的 Upload 组件上传图片到后端服务器的基本流程和思路。前端使用了 React + Antd ,后端使用 Nodejs 的Express 。主要介绍 Antd 中 Upload 组件的照片墙,也就是上传多张图片。Ant Design 官方 Upload 教程地址:Antd Upload 组件实现1. 简...

weixin_36074800的博客 5235
上一篇: 【mini-vue】runtime-core模块学习
下一篇: 【webpack】source-map学习笔记
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值