基于ant的图片上传组件封装(复制即可使用)

/**
 * 上传图片组件
 * @param imgSize 图片大小限制
 * @param data 上传数据
 * @param disabled 是否禁用
 */

import React, { useState,useEffect } from 'react';
import { Upload, Icon, message} from 'antd';
const UploadImage = ({
  imgSize = 50,
  data = { Directory: 'Image' },
  disabled = false,
  onChange,
  value
}) => {
  const [loading, setLoading] = useState(false);
  const [fileList, setFileList] = useState([]);
  useEffect(()=>{
    setImg();
  },[value])

  const beforeUpload = (file) => {
    const isImage = file.type.startsWith('image/');
    if (!isImage) {
      message.error('只能上传图片文件!');
      return false;
    }

    const isLt4M = file.size / 1024 < imgSize;
    if (!isLt4M) {
      message.error(`图片大小不能超过${imgSize}KB!`);
      onChange('')
    }
    
    return isLt4M;
  };

  const uploadConfig = {
    action: `${configs.host.test}/api/FileUpload/Upload`,
    listType: 'picture-card',
    onChange(info) {
      setFileList(info.fileList);

      if (info.file.status === 'uploading') {
        setLoading(true);
        return;
      }

      if (info.file.status === 'done') {
        if (info.file.response.code === '0') {
          message.success(`${info.file.name} 上传完成`);
          onChange(info.file.response.data)
         
        } else {
          onChange('')
          message.error(`${info.file.name} 上传失败`);
          
        }
      }
    },
    onRemove() {
      setLoading(false);
      onChange('')
    },
  };

  const setImg = () => {
    if(value){
         setFileList([
        {
          uid: 1,
          name: 'xxx.jpg',
          status: 'done',
          url: value,
        },
      ]);
    }else{
      setFileList([]);
    }
  };

  return (
    <Upload
    {...uploadConfig}
    name="filename"
    data={{ ...data, merchantId: localStorage.getItem('MerchantId') }}
    defaultFileList={fileList}
    fileList={fileList}
    beforeUpload={beforeUpload}
    disabled={disabled}
  >
    {fileList.length > 0 ? null : (
      <div>
        <Icon type={loading ? 'loading' : 'plus'} />
        <div className="ant-upload-text">上传</div>
      </div>
    )}

  </Upload>
  );
};

export default UploadImage;
 {/* 上传组件 ---开始 */}
                <FormItem
                  {...formItemLayout2}
                  label="上传组件"
                  extra="图片建议尺寸:606像素*202像素,大小不超过2M。"
                >
                  {getFieldDecorator("brandLogo", {
                    rules: [{ required: true, message: "请上传图片" }],
                    initialValue: detailData.brandLogo,
                  })(<UploadImage imgSize={10000} />)}
                </FormItem>
                {/* 上传组件 ---结束 */}
  1. 将上传组件和Form绑定在一起

    1. 不需要在提交的时候额外判断 XXX图片是否存在

    2. 删除图片时会主动触发表单当前图片的验证,提示用户,表现形式和其他表单项一致

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/396557.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Python代码】 剪辑法欠采样 CNN压缩近邻法欠采样

借鉴&#xff1a;关于K近邻&#xff08;KNN&#xff09;&#xff0c;看这一篇就够了&#xff01;算法原理&#xff0c;kd树&#xff0c;球树&#xff0c;KNN解决样本不平衡&#xff0c;剪辑法&#xff0c;压缩近邻法 - 知乎 一、剪辑法 当训练集数据中存在一部分不同类别数据的…

105.网游逆向分析与插件开发-网络通信封包解析-分析接收到的对话数据包

内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;接收数据的初步逆向分析 通过上一个内容&#xff0c;找到了数据包出现的一个很重要的位置&#xff0c;只要hook之后就能很好的得到这个数据了 然后来到明文数据的位置&#xff0c;把数据包复制出来&…

网站管理新利器:免费在线生成 robots.txt 文件!

&#x1f916; 探索网站管理新利器&#xff1a;免费在线生成 robots.txt 文件&#xff01; 你是否曾为搜索引擎爬虫而烦恼&#xff1f;现在&#xff0c;我们推出全新的在线 robots.txt 文件生成工具&#xff0c;让你轻松管理网站爬虫访问权限&#xff0c;提升网站的可搜索性和…

代码随想录算法训练营第五十六天|300.最长递增子序列 , 674. 最长连续递增序列 ,718. 最长重复子数组

300.最长递增子序列 今天开始正式子序列系列&#xff0c;本题是比较简单的&#xff0c;感受感受一下子序列题目的思路。 视频讲解&#xff1a;动态规划之子序列问题&#xff0c;元素不连续&#xff01;| LeetCode&#xff1a;300.最长递增子序列_哔哩哔哩_bilibili 代码随想录…

TLS、运输层安全协议

目录 运输层安全协议 1 协议 TLS 的要点 1.1 协议 TLS 的位置 1.2 TLS 与应用层协议独立无关 1.3 协议 TLS 具有双向鉴别的功能 1.4 TLS 建立安全会话的工作原理 TLS 的握手阶段 TLS 的会话阶段 1.5 TLS 传送的记录格式 2 协议 TLS 必须包含的措施 运输层安全协议 现…

OpenAI取消GPT-4 Turbo每日限制,速率提升一倍;扩散模型的理论基础

&#x1f989; AI新闻 &#x1f680; OpenAI取消GPT-4 Turbo每日限制&#xff0c;速率提升一倍 摘要&#xff1a;OpenAI宣布取消GPT-4 Turbo的每日限制&#xff0c;提升速率限制1倍&#xff0c;每分钟可处理高达150万TPM的数据。 OpenAI解释速率限制对防止API滥用、确保公平访…

泰山派摄像头使用-opencv流程

1. 泰山派添加camera 连接摄像头连接到usb接口,查看dev设备: # 在终端中输入如下命令&#xff0c;可以查看到camera设备资源&#xff1a; ls /dev/video* 检查板卡上的camera设备资源示例 也可以使用v4l2命令查看 v4l2-ctl --list-devices v4l2-ctl --list-devices是一个命令…

如何构建企业专属GPT

大语言模型&#xff08;LLM&#xff09;具有令人印象深刻的自然语言理解和生成能力&#xff0c; 2022年11月底OpenAI发布了ChatGPT&#xff0c;一跃成为人工智能AI领域的现象级应用。但由于LLM的训练数据集主要来源于互联网数据&#xff0c;企业私域信息并未被LLM所训练&#x…

【RPG Maker MV 仿新仙剑 战斗场景UI (二)】

RPG Maker MV 仿新仙剑 战斗场景UI 二 战斗指令菜单原仙剑战斗指令图RMMV战斗指令对应代码战斗指令菜单代码效果 战斗指令菜单 原仙剑战斗指令菜单是使用方向键控制&#xff0c;同时按照使用情况正好对应四个指令和四个方向&#xff0c;同时没有选中的菜单用黑色透明图片覆盖&…

基于数字双输入的超宽带Doherty功率放大器设计-从理论到ADS版图

基于数字双输入的超宽带Doherty功率放大器设计-从理论到ADS版图 参考论文: 高效连续型射频功率放大器研究 假期就要倒计时啦&#xff0c;估计是寒假假期的最后一个博客&#xff0c;希望各位龙年工作顺利&#xff0c;学业有成。 全部工程下载&#xff1a;基于数字双输入的超宽…

npm run dev运行出现NODE_OPTIONS=--max_old_space_size=4096 vite --mode dev --host?

问题描述 PS E:\AWorkDataease\DataEase\core\core-frontend> npm run dev dataease0.0.0 dev NODE_OPTIONS–max_old_space_size4096 vite --mode dev --host 0.0.0.0 ‘NODE_OPTIONS’ 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件。 解决方案 遇到…

Linux RabbitMQ 安装及卸载

一、安装 1、前景 RabbitMQ是用Erlang编写的&#xff0c;所以需要先安装Erlang的编译环境 注意 Erlang和RabbitMQ的版本是有一些版本匹配关系的&#xff0c;如果不匹配会导致RabbitMQ无法启动 2、安装Erlang # 下载 wget https://packages.erlang-solutions.com/erlang/r…

使用纯 CSS 实现元素高度的过渡(不采用 max-height)

1. 前言 不知大家是否接触过元素高度的过渡&#xff0c;之前呢我是使用 CSS 加 JS 的方式来解决的&#xff0c;就是通过 JS 计算一下要过渡的元素的高度&#xff0c;然后自己给它加上 height 为某一数值。不知大家是如何解决的&#xff1f; 相信大家在做高度过渡时&#xff0…

Mac远程连接Windows 11

1. Windows配置 1.1 打开远程连接权限 打开“控制面板”搜索“远程”&#xff0c;选择“允许远程访问你的计算机”这一项。 1.2 添加远程连接用户 打开“计算机管理”&#xff0c;并在用户下新增“新用户”&#xff0c;share是我自己使用的名字&#xff0c;这个名字不固定随…

【Java EE初阶二十】关于http(一)

1. 初识http HTTP 最新的版本应该是 HTTP/3.0&#xff0c;目前大规模使用的版本 HTTP/1.1&#xff1b; 下面来简单说明一下使用 HTTP 协议的场景: 1、浏览器打开网站 (基本上) 2、手机 APP 访问对应的服务器 (大概率) 前面的 TCP与UDP 和http不同&#xff0c;HTTP 的报文格式&a…

0、电源管理入门之开篇即巅峰

目录 1. 电源状态介绍 2. Linux 电源管理的组成 3. ARM SoC中PCSA与SCP 4. SoC设计中的电源管理 “人是铁饭是钢,一顿不吃饿得慌”,对于嵌入式设备而言,没有电一切都白瞎,特别是带电池的终端嵌入式设备,对电能的管理尤其重要,也是我们调试设备的一个重点。可以说…

[工具探索]VSCode介绍和进阶使用

相比较GoLand、PhpStorm、PyCharm、WebStorm的重量级内存占用&#xff0c;从Windows系统来&#xff0c;各种卡死&#xff0c;换到MacOS倒不会卡死&#xff0c;但是内存占用太多&#xff0c;影响体验&#xff0c;决定换到VSCode。当然这个过程需要适应过渡期&#xff0c;旧伙计都…

文件包含+文件上传漏洞(图片马绕过)

目录 一.文件包含二.文件上传三.图片马四.题目 一.文件包含 将已有的代码以文件形式包含到某个指定的代码中&#xff0c;从而使用其中的代码或者数据&#xff0c;一般是为了方便直接调用所需文件&#xff0c;文件包含的存在使得开发变得更加灵活和方便&#xff08;若对用户输入…

广州游戏业:低调内敛 务实创新

广州游戏业&#xff1a;低调内敛 务实创新 中国游戏产业发展迅猛&#xff0c;不同城市因地制宜&#xff0c;各具特色。本篇我们的视角转到历史悠久的广州&#xff0c;看看这座百年老城的游戏业正在以怎样的姿态前行。 广州在中国游戏产业中有其独特地位——作为游戏产业发源地…

k8s学习(RKE+k8s+rancher2.x)成长系列之简配版环境搭建(三)

3.19.切换RKE用户&#xff0c;并做免密登录&#xff08;三台机器相互免密&#xff09; su rke cd~ ssh-keygen[rkemaster.ssh]$ssh-copy-id rkeslaver2 [rkemaster.ssh]$ssh-copy-id rkeslaver1 [rkemaster.ssh]$ssh-copy-id rkemaster3.20.搭建RKE集群 为了方便理解&#…