热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

记录react上传组件(分步)的封装和使用

记录react上传组件(分步)的封装和使用,Go语言社区,Golang程序员人脉社
import React, { useState} from 'react';
import ProForm, {
    StepsForm,
    ProFormUploadButton,
} from '@ant-design/pro-form';
import { Button, message, Modal } from 'antd';
import { PlusOutlined } from '@ant-design/icons';
import * as xlsx from 'xlsx';
const waitTime = (time: number = 100) => {
    return new Promise((resolve) => {
        setTimeout(() => {
            resolve(true);
        }, time);
    });
};
export default (props:any) => {
    const [visible, setVisible] = useState(false);
    const {title,href,url}=props;
    return (
        <>
            <Button type="primary" onClick={() => setVisible(true)}>
                <PlusOutlined />
        {title}
      </Button>
            <StepsForm
                onFinish={async (values) => {
                    // console.log("这是参数",values.dragger[0].originFileObj);
                    const file=values.dragger[0].originFileObj;
                    // console.log(file.name);
                    const fileReader = new FileReader();
                    var data:any=[];
                    fileReader.onload = event => {
                            const bstr = (event.target as any).result;
                            const workbook = xlsx.read(bstr, {type:'binary'});
                            for (const sheet in workbook.Sheets) {
                                if (workbook.Sheets.hasOwnProperty(sheet)) {
                                  // 利用 sheet_to_json 方法将 excel 转成 json 数据
                                  data = data.concat(xlsx.utils.sheet_to_json(workbook.Sheets[sheet]));
                                   break; // 如果只取第一张表,就取消注释这行
                                }
                            }
                        console.log(data);
                        fetch(url,{
                            method:"post",
                            headers:{
                               "Content-Type":"application/json"
                                },
                            body:JSON.stringify(data)
                         }).then(response=>{
                             console.log(response)
                         })
                    }
                    fileReader.readAsBinaryString(file);
                    await waitTime(1000);
                    setVisible(false);
                    message.success('提交成功');
                }}
                formProps={{
                    validateMessages: {
                        required: '此项为必填项',
                    },
                }}
                stepsFormRender={(dom, submitter) => {
                    return (
                        <Modal
                            title="上传文件"
                            width={800}
                            onCancel={() => setVisible(false)}
                            visible={visible}
                            footer={submitter}
                            destroyOnClose
                        >
                            {dom} 
                        </Modal>
                    );
                }} 
            >
                <StepsForm.StepForm
                    name="template"
                    title="下载模板"
                    onFinish={async () => {
                         await waitTime(2000);
                        return true;
                    }}
                >
                <Button key="add"
                type="primary"
                ><a href={href}>下载模板</a></Button>  
                </StepsForm.StepForm>
                <StepsForm.StepForm name="upload" title="上传文件">
                    <ProForm.Group>
                        <ProFormUploadButton
                            name="dragger"
                            max={1}
                        />
                    </ProForm.Group>
                    {/*  */}{/* TODO 上传预览 */}</StepsForm.StepForm></StepsForm></>);};
 <UploadComponent title="上传" href="/excel/模板.xls" url="上传的后台路径" />

效果图:
1、在这里插入图片描述
在这里插入图片描述


推荐阅读
  • 更新vuex的数据为什么用mutation?
    更新vuex的数据为什么用mutation?,Go语言社区,Golang程序员人脉社 ... [详细]
  • 本文深入探讨了RecyclerView的缓存与视图复用机制,详细解析了不同类型的缓存及其功能。首先,介绍了屏幕内ViewHolder的Scrap缓存,这是一种最轻量级的缓存方式,旨在提高滚动性能并减少不必要的视图创建。通过分析其设计原理,揭示了Scrap缓存为何能有效提升用户体验。此外,还讨论了其他类型的缓存机制,如RecycledViewPool和ViewCacheExtension,进一步优化了视图复用效率。 ... [详细]
  • h5调用本地摄像头和麦克风一
    h5调用本地摄像头和麦克风一,Go语言社区,Golang程序员人脉社 ... [详细]
  • 用阿里云的免费 SSL 证书让网站从 HTTP 换成 HTTPS
    HTTP协议是不加密传输数据的,也就是用户跟你的网站之间传递数据有可能在途中被截获,破解传递的真实内容,所以使用不加密的HTTP的网站是不 ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • 开发日志:高效图片压缩与上传技术解析 ... [详细]
  • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
  • C++ 异步编程中获取线程执行结果的方法与技巧及其在前端开发中的应用探讨
    本文探讨了C++异步编程中获取线程执行结果的方法与技巧,并深入分析了这些技术在前端开发中的应用。通过对比不同的异步编程模型,本文详细介绍了如何高效地处理多线程任务,确保程序的稳定性和性能。同时,文章还结合实际案例,展示了这些方法在前端异步编程中的具体实现和优化策略。 ... [详细]
  • 在Ubuntu系统中安装Android SDK的详细步骤及解决“Failed to fetch URL https://dlssl.google.com/”错误的方法
    在Ubuntu 11.10 x64系统中安装Android SDK的详细步骤,包括配置环境变量和解决“Failed to fetch URL https://dlssl.google.com/”错误的方法。本文详细介绍了如何在该系统上顺利安装并配置Android SDK,确保开发环境的稳定性和高效性。此外,还提供了解决网络连接问题的实用技巧,帮助用户克服常见的安装障碍。 ... [详细]
  • CTF竞赛中文件上传技巧与安全绕过方法深入解析
    CTF竞赛中文件上传技巧与安全绕过方法深入解析 ... [详细]
  • 微信小程序实现类似微博的无限回复功能,内置云开发数据库支持
    本文详细介绍了如何利用微信小程序实现类似于微博的无限回复功能,并充分利用了微信云开发的数据库支持。文中不仅提供了关键代码片段,还包含了完整的页面代码,方便开发者按需使用。此外,HTML页面中包含了一些示例图片,开发者可以根据个人喜好进行替换。文章还将展示详细的数据库结构设计,帮助读者更好地理解和实现这一功能。 ... [详细]
  • 本文探讨了 Kafka 集群的高效部署与优化策略。首先介绍了 Kafka 的下载与安装步骤,包括从官方网站获取最新版本的压缩包并进行解压。随后详细讨论了集群配置的最佳实践,涵盖节点选择、网络优化和性能调优等方面,旨在提升系统的稳定性和处理能力。此外,还提供了常见的故障排查方法和监控方案,帮助运维人员更好地管理和维护 Kafka 集群。 ... [详细]
  • 本文介绍了一种利用PHP cURL库高效提取Sohu邮箱联系人列表的方法。通过设置错误报告级别、定义Cookie文件路径等关键步骤,确保了代码的稳定性和可靠性。经过实际测试,该方法在2012年3月24日被验证为有效,能够快速准确地获取联系人信息。此外,文章还提供了详细的代码示例和注意事项,帮助开发者更好地理解和应用这一技术。 ... [详细]
  • 分布式开源任务调度框架 TBSchedule 深度解析与应用实践
    本文深入解析了分布式开源任务调度框架 TBSchedule 的核心原理与应用场景,并通过实际案例详细介绍了其部署与使用方法。首先,从源码下载开始,详细阐述了 TBSchedule 的安装步骤和配置要点。接着,探讨了该框架在大规模分布式环境中的性能优化策略,以及如何通过灵活的任务调度机制提升系统效率。最后,结合具体实例,展示了 TBSchedule 在实际项目中的应用效果,为开发者提供了宝贵的实践经验。 ... [详细]
  • 深入解析Gradle中的Project核心组件
    在Gradle构建系统中,`Project` 是一个核心组件,扮演着至关重要的角色。通过使用 `./gradlew projects` 命令,可以清晰地列出当前项目结构中包含的所有子项目,这有助于开发者更好地理解和管理复杂的多模块项目。此外,`Project` 对象还提供了丰富的配置选项和生命周期管理功能,使得构建过程更加灵活高效。 ... [详细]
author-avatar
慕容盼烟迎曼
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有