【Ant-Desgin 头像上传框】限制数量为1张图片,base64,其他需求可以改我组件中的代码

news2024/11/24 7:49:19

Ant-Desgin 头像上传框

  • 样式图
  • 参数
  • 主要代码
    • UpLoad 组件
    • 父组件

样式图

在这里插入图片描述
在这里插入图片描述

图片数量限制为1,当选择了图片后,需要切换图像时需点击头像完成切换

参数

/**
 * @description: 图片上传组件
 * @param {*} action: 上传地址
 * @param {*} width: 宽度
 * @param {*} height: 高度
 * @param {*} onFileListChange: 文件列表改变的回调函数
 * @return {*}
 */
<FileUpload action={"/upload"} width={100} height={100} onFileListChange={handleFileListChange} />

主要代码

UpLoad 组件

/* eslint-disable react-hooks/exhaustive-deps */
/* eslint-disable no-unused-vars */
import React, { useEffect, useState, useRef } from 'react'
import { Upload, message } from 'antd'
import PropTypes from 'prop-types'
import ImgCrop from 'antd-img-crop'

const FileUpload = ({ action, width = 100, height = 100, onFileListChange }) => {
  const [fileList, setFileList] = useState([])
  const [imgUrl, setImgUrl] = useState('')
  const uploadRef = useRef(null)

  const imgStyle = {
    width: `${width}px`,
    height: `${height}px`,
    objectFit: 'cover',
    borderRadius: '50%',
    cursor: 'pointer'
  }

  useEffect(() => {}, [])

  FileUpload.propTypes = {
    action: PropTypes.string.isRequired,
    width: PropTypes.number,
    height: PropTypes.number,
    onFileListChange: PropTypes.func
  }

  const onChange = async ({ fileList: newFileList }) => {
    const src = await new Promise(resolve => {
      const reader = new FileReader()
      reader.readAsDataURL(newFileList[0].originFileObj)
      reader.onload = () => resolve(reader.result)
    })
    setImgUrl(src)
    setFileList(newFileList)
    // 调用父组件传递的回调函数
    onFileListChange(newFileList)
  }

  const onPreview = async file => {
    const src = await new Promise(resolve => {
      const reader = new FileReader()
      reader.readAsDataURL(file.originFileObj)
      reader.onload = () => resolve(reader.result)
    })
    const image = new Image()
    image.src = src
    const imgWindow = window.open(src)
    imgWindow?.document.write(image.outerHTML)
  }

  const beforeUpload = async file => {
    console.log('beforeUpload')
    const isLt12M = file.size / 1024 / 1024 < 12
    const isImage = file.type.startsWith('image/')
    if (!isLt12M) {
      message.error('图片不得大于12MB!')
    }
    if (!isImage) {
      message.error('只允许上传图片!')
    }
    return isLt12M && isImage
  }

  const handleImageClick = () => {
    const uploadInput = document.querySelector('.ant-upload input[type="file"]')
    if (uploadInput) {
      uploadInput.click()
    }
  }

  return (
    <>
      <ImgCrop>
        <Upload
          action={action}
          ref={uploadRef}
          listType="picture-circle"
          fileList={fileList}
          onChange={onChange}
          onPreview={onPreview}
          beforeUpload={beforeUpload}
          showUploadList={false}
          maxCount={1}
        >
          {fileList.length < 1 && '+ Upload'}
        </Upload>
      </ImgCrop>
      {fileList.length > 0 && (
        <div>
          <img src={imgUrl} alt="avatar" style={imgStyle} onClick={handleImageClick} />
        </div>
      )}
    </>
  )
}

export default FileUpload

父组件

/* eslint-disable no-unused-vars */
import React, { useEffect, useState } from 'react'
import FileUpload from '.'


const Demo = () => {
  const [parentFileList, setParentFileList] = useState([])

  const handleFileListChange = (newFileList) => {
    // 更新父组件的文件列表
    setParentFileList(newFileList)
  }

  useEffect(() => {
    console.log(parentFileList, 666);
  }, [parentFileList, setParentFileList])

  return (
    <div>
      <FileUpload action={"/upload"} width={100} height={100} onFileListChange={handleFileListChange} />
    </div>
  )
}

export default Demo

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大数据机器学习:常见模型评估指标

大数据机器学习&#xff1a;常见模型评估指标 一.模型评估综述 1.1 什么是模型评估 模型评估是指在机器学习中&#xff0c;对于一个具体方法输出的最终模型&#xff0c;使用一些指标和方法来评估它的泛化能力。这一步通常在模型训练和模型选择之后&#xff0c;正式部署模型之…

ES全文检索支持拼音和繁简检索

ES全文检索支持拼音和繁简检索 1. 实现目标2. 引入pinyin插件2.1 编译 elasticsearch-analysis-pinyin 插件2.2 安装拼音插件 3. 引入ik分词器插件3.1 已有作者编译后的包文件3.2 只有源代码的版本3.3 安装ik分词插件 4. 建立es索引5.测试检索6. 繁简转换 1. 实现目标 ES检索时…

CentOS7编译jsoncpp静态库

1. 官网下载源码 github地址&#xff1a;GitHub - open-source-parsers/jsoncpp at update 2. 编译 Unzip jsoncpp-master.zip Cd jsoncpp-master mkdir -p ./build/debug cd ./build/debug/ cmake -DCMAKE_BUILD_TYPEdebug -DBUILD_SHARED_LIBSOFF -DCMAKE_ARCHIVE_OUTPUT_D…

3d数字化在线云展平台打破传统束缚

在数字化浪潮的推动下&#xff0c;线上VR云展会正以其独特的魅力&#xff0c;为展览主办方打开一扇全新的大门。这一新兴展览形式不仅突破了传统实体展览的时间、空间和物理限制&#xff0c;更为国际性展览活动带来了前所未有的可能性。 作为展览主办方&#xff0c;您是否曾为实…

高扬程水泵的性能与应用领域 /恒峰智慧科技

在现代社会中&#xff0c;科技的发展为我们的生活带来了无数便利和可能性。其中&#xff0c;高扬程水泵作为一种高效能的水泵&#xff0c;其独特的设计使其在各个领域都有着广泛的应用&#xff0c;尤其是在森林消防中。 一、高扬程水泵的性能 1. 高扬程&#xff1a;高扬程水泵…

stm32HAL库-GPIO

一 什么是 GPIO: GPIO(general porpose intput output), 通用输入输出端口 . 二 我们先认识芯片控制 GPIO 输出控制。 2.1LED 硬件原理如图&#xff1a; 当电流从这根电线流通&#xff0c; LED 亮。当电流不通过这根电线&#xff0c; LED 灭。 上面 PF** &#xff0c;芯片电…

HarmonyOS编程实践系列:第一节 - 创建健康App欢迎页

系列文章目录 &#xff08;零&#xff09;鸿蒙HarmonyOS入门&#xff1a;如何配置环境&#xff0c;输出“Hello World“ &#xff08;一&#xff09;鸿蒙HarmonyOS开发基础 &#xff08;二&#xff09;鸿蒙HarmonyOS主力开发语言ArkTS-基本语法 &#xff08;三&#xff09;鸿蒙…

C语言阶段性测试错题纠正与拓展

引言&#xff1a;在2024年4月26日&#xff0c;我进行了C语言知识的“期末考试”。通过这次考试&#xff0c;我发现了我的知识漏洞。所以&#xff0c;我写下这篇博客来记录我的错题&#xff0c;并进行纠正&#xff0c;然后对于以前遗忘知识的回顾。 更多有关C语言的知识详解可前…

螺栓的预紧力与夹紧力——​SunTorque智能扭矩系统​

预紧力与夹紧力是紧固件使用中两个重要的力学概念。了解它们之间的关系以及如何正确地应用它们&#xff0c;对于确保机械系统的稳定性和安全性至关重要。本文SunTorque智能扭矩系统将从紧固件的基本概念和用途出发&#xff0c;深入探讨预紧力与夹紧力的概念、影响因素以及实际应…

四信数字孪生水库解决方案,加快构建现代化水库运行管理矩阵

近年&#xff0c;水利部先后出台《关于加快构建现代化水库运行管理矩阵的指导意见》与《构建现代化水库运行管理矩阵先行先试工作方案》等文件&#xff0c;明确总体要求及试点水库、先行区域建设技术要求等&#xff0c;为全面推进现代化水库运行管理矩阵建设工作提供依据。 《2…

android studio项目实战——备忘录(附源码)

成果展示&#xff1a; 1.前期准备 &#xff08;1&#xff09;在配置文件中添加权限及启动页面顺序 ①展开工程&#xff0c;打开app下方的AndroidManifest.xml,添加权限&#xff0c;如下&#xff1a; <uses-permission android:name"android.permission.CAMERA"…

NGINX发布动态页面的方法

一、建立 [rootserver100 html]# vim index.php [rootserver100 html]# pwd /usr/share/nginx/html 二、下载PHP文件 [rootserver100 conf.d]# dnf install php.x86_64 -y 正在更新 Subscription Management 软件仓库。 无法读取客户身份 本系统尚未在权利服务器中注册。可…

【C++】:const成员,取地址及const取地址操作符重载

目录 一&#xff0c;const成员二&#xff0c;取地址及const取地址操作符重载 一&#xff0c;const成员 将const修饰的“成员函数”称之为const成员函数&#xff0c;const修饰类成员函数&#xff0c;实际修饰该成员函数隐含的this指针&#xff0c;表明在该成员函数中不能对类的…

微信私域:如何管理多号聊天

我经常要在不同的微信号之间来回切换&#xff0c;这真是既麻烦又容易漏回消息&#xff0c;让我头疼不已。我试过了很多方法&#xff0c;但效果都不太理想。直到有一天&#xff0c;朋友分享了一个微信私域流量管理系统给我&#xff0c;我决定试试看。试用之后&#xff0c;我感觉…

机器学习理论基础—聚类算法

机器学习理论基础—聚类算法 聚类的距离计算 聚类&#xff1a;物以类聚。将相似的样本聚集到一起&#xff0c;使得同一类簇的样本尽可能接近,不同类簇的样本尽可能远离。&#xff08;无监督算法&#xff09; 对于距离的定义&#xff1a;满足下面的四个特点 非负性同一性对称性…

实验 | RT-Thread:L0

1 理解 官网文档&#xff1a;RT-Thread 简介 在 RT-Thread 系统中&#xff0c;任务通过线程实现的&#xff0c;RT-Thread 中的线程调度器也就是以上提到的任务调度器。RT-Thread与FreeRTOS是同等地位的东西&#xff0c;都是属于RTOS项目设置&#xff1a;RT-Thread 4.0.2 基于…

单链表进阶算法题精析

目录 一、回文链表 1.1 题目 1.2 题解 1.3 分析 二、带环链表I 2.1 题目 2.2 题解 2.3 分析 2.3.1为什么该思路可行&#xff1f; 2.3.2为什么只能快指针走两步&#xff1f; 三、带环链表II 3.1 题目 3.2 题解 3.3 分析 四、相交链表 4.1 题目 4.2 题解 4.3 分…

uniapp:K线图,支持H5,APP

使用KLineChart完成K线图制作,完成效果: 1、安装KLineChart npm install klinecharts2、页面中使用 <template><view class="index"><!-- 上方选项卡 --><view class="kline-tabs"><view :style="{color: current==ite…

git出错、文件无法删除、文件无法访问、文件或目录损坏且无法读取 等相关问题处理

一、错误历程与解决方案 1. 在用idea时&#xff0c;突然出现 部分git的命令无法使用&#xff0c;提示错误 2. 尝试删除项目文件夹&#xff0c;重新从git拉取代码 3.发现无法删除文件夹&#xff0c;删除操作没有任何反应&#xff0c;但是可以对文件夹重命名。 4.重新clone g…

【哈希】Leetcode 219. 存在重复元素 II

题目讲解 219. 存在重复元素 II 算法讲解 class Solution { public:bool containsNearbyDuplicate(vector<int>& nums, int k) {map<int, int>Hash;for(int i 0; i < nums.size(); i){//这一步说明前面已经出现过一次这样的数字了&#xff0c;所以用后面…