zoukankan      html  css  js  c++  java
  • 【antd-Upload】支持预览功能的头像上传

    import React, { useState, useEffect } from 'react';
     import { Row, Col, Form, Button, Upload } from 'antd';
     import { LoadingOutlined, CloudUploadOutlined } from '@ant-design/icons';
    function PictureUpload(props){
        const [imageUrl, setImageUrl] = useState('');
        const [oldLoginUrl, setOldLoginUrl] = useState('');
          const [fileList, setFileList] = useState('');
       // 获取登录页面 logo
        async function getSystemLoginLogoFn() {
            const res = await getSystemLoginLogo();
            setOldLoginUrl(formatUrl(res));
        }
    
        // 二进制流转base64
        function formatUrl(res) {
            const data =
                'data:image/png;base64,' +
                btoa(new Uint8Array(res).reduce((data, byte) => data + String.fromCharCode(byte), ''));
            return data;
        }
    
       function getBase64(img, callback) {
            const reader = new FileReader();
            reader.addEventListener('load', () => callback(reader.result));
            reader.readAsDataURL(img);
        }
    
        const beforeUpload = (file) => {
            //控制上传图片格式
            const isJpgOrPng = file.type === 'image/jpeg' || file.type === 'image/png';
            if (!isJpgOrPng) {
                message.error('您只能上传JPG/PNG 文件!');
                return;
            }
            const isLt2M = file.size / 1024 / 1024 < 2;
            if (!isLt2M) {
                message.error('图片大小必须小于2MB!');
                return;
            }
            getBase64(file, (imageUrl) => {
                setLoading(false);
                setImageUrl(imageUrl);
            });
            setFileList(file);
            return false;
        };

      // 提交
      function
    handleSubmit(){
          const formData = new FormData();
             formData.append('file', fileList);
             await uploadLogoLogin(formData).then((res: ApiRes) => {
             if (res.code === 200) {
                    message.success('上传成功');
                    getSystemLoginLogoFn();
                    setImageUrl('');
                    setFileList('');
                } else {
                     message.error('上传失败');
                }
            });
      }
        const uploadButton = (
            <div>
                {loading ? <LoadingOutlined /> : <CloudUploadOutlined style={{ fontSize: '36px', color: '#ccc' }} />}
                <div className="ant-upload-text" style={{ color: '#ccc' }}>
                    点击上传
                </div>
            </div>
        );
      return (
            <div className="app-container">
                    <div className="logo-maintenance">
                           <Form form={systemForm}>
                                  <Row gutter={14}>
                                            <Col span={6}>
                                                <Form.Item label="原logo" name="oldLoginUrl">
                                                    <img
                                                        src={oldLoginUrl}
                                                        style={{  '120px', height: '120px' }}
                                                    />
                                                </Form.Item>
                                            </Col>
                                            <Col>
                                                <Form.Item label="新logo" name="newLoginUrl" rules={[{ required: true }]}>
                                                    <Upload
                                                        name="avatar"
                                                        listType="picture-card"
                                                        showUploadList={false}
                                                        beforeUpload={beforeUpload}>
                                                        {imageUrl ? (
                                                            <img src={imageUrl} alt="avatar" style={{  '100%' }} />
                                                        ) : (
                                                            uploadButton
                                                        )}
                                                    </Upload>
                                                </Form.Item>
                                            </Col>
                                    </Row>
    <Button onClick={handleSubmit}>提交</Button> </Form> </div> </div>
        ) }
    export default PictureUpload;
    
    
  • 相关阅读:
    DB2、ORACLE SQL写法的主要区别
    最快的序列化组件protobuf的.net版本protobuf.net
    Oracle迁移到DB2常用转换
    模拟百度分页算法
    MySQL 自关联查询
    python 实现cm批量上传
    python实现京东秒杀
    百度地图商家爬虫
    django BBS
    python 堆排序
  • 原文地址:https://www.cnblogs.com/minjh/p/14478658.html
Copyright © 2011-2022 走看看