首页 > 其他分享 >React+AntD文件上传并自定义上传逻辑

React+AntD文件上传并自定义上传逻辑

时间:2024-11-20 10:33:12浏览次数:1  
标签:const 自定义 formData React file import 上传

上传组件 DragClickUpload.tsx

import {CloudUploadOutlined} from '@ant-design/icons';
import type {UploadProps} from 'antd';
import {message, Upload} from 'antd';
import React, {useState} from 'react';
import axios from "axios";
const {Dragger} = Upload;
import Bus from "../../../utils/eventBus";
import KeyManServices from "src/services/keyMan";

const handleRequest = async (options: any) => {
    const { onSuccess, one rror, file, onProgress } = options;
    const formData = new FormData();
    formData.append('file', file);
    formData.append('uploadVersionNo', sessionStorage.getItem('upload-version-no'));
    try {
        const response = await axios.post('/zdr/zdrinfo/importZdr', formData, {
            onUploadProgress: (progressEvent) => {
                const percentCompleted = Math.round((progressEvent.loaded * 100) / progressEvent.total);
            },
        });
        if (response.data.status === 200) {
            message.success('上传成功');
            Bus.emit('refresh-table-data')
        } else {
            message.success('上传失败');
        }
    } catch (error) {
        message.success('上传失败');
    }
}
const DragClickUpload = React.forwardRef((props, ref) => {
    const [fileList, setFileList] = useState([])
    const uploadAttr: UploadProps = {
        name: 'file',
        fileList,
        multiple: true,
        showUploadList: true,
        customRequest: handleRequest,
        onChange(info: any) {
            console.log('output-> info:::::: ', info)
            const {status} = info.file;
            console.log('output-> status::: ', status)
        },
        onDrop(e) {
            console.log('Dropped files', e.dataTransfer.files);
        },
    };


    React.useImperativeHandle(ref, () => ({
        uploadAttr,
        setFileList
    }));

    const onDownloadTemplate = (e: any) => {
        e.stopPropagation()
        window.open('/zdr/zdrinfo/exportTemplate')
    }
    return (
        <Dragger {...uploadAttr}>
            <main className="import-upload-box">
                <section className="left-icon">
                    <CloudUploadOutlined/>
                </section>
                <section className="right-desc-box">
                    <div className="desc-row">
                        <span>点击上传</span>
                        <span><i>/</i> 拖拽文件到此区域</span>
                        <span onClick={(e) => onDownloadTemplate(e)}>下载模板</span>
                    </div>
                    <div className="desc-row-p">
                        <p>支持excel文件(单个Excel最大100M)</p>
                    </div>
                </section>
            </main>
        </Dragger>
    )
})


export default DragClickUpload;

标签:const,自定义,formData,React,file,import,上传
From: https://www.cnblogs.com/openmind-ink/p/18556325

相关文章

  • reactflow 中 useOnViewportChange 模块作用
    1.响应视口变化的核心功能在ReactFlow中,`useOnViewportChange`是一个用于处理视口(Viewport)变化的钩子。视口是用户在界面上看到的包含流程图部分的区域,它的变化包括但不限于平移、缩放、旋转等操作。这个模块的主要作用是让开发者能够监听和响应视口的这些变化。2.执行......
  • reactflow 中 useReactFlow 模块作用
    1.访问ReactFlow核心实例和状态它允许组件访问ReactFlow的核心实例及其相关状态。这意味着组件可以获取到有关整个流程图的关键信息,例如当前的缩放级别、视口的位置和大小等。2.操作ReactFlow实例方法除了获取状态,`useReactFlow`还提供了操作ReactFlow实例方法的......
  • 使用脚手架搭建React项目
    ​......
  • React 组件中 State 的定义、使用及正确更新方式
    ​......
  • 【Linux】将python文件上传到GitHub(新版图文逐步详解)
    1.进入想要上传文件所在的文件夹,这里以如下图中目录下的t1为例2.输入如下命令,将当前目录变为git可以管理的目录gitinit3.将想要上传的文件添加到缓冲区gitaddt1.py出错了,查阅资料发现出现该提示是因为.gitignore文件中有规则将t1.py文件(或其所在目录)排除了,如果......
  • Flask上传服务器,conda环境配置(都怪torch)
    Flask上传服务器,conda环境配置(都怪pytorch)问题:有个任务,将一个flask的服务换到另一个服务器上,之前的服务器一直用国内的镜像源可以直接下载镜像,当这个服务器设置相同的镜像源也下载不了,一直卡在solvingenvironment这一步。找到一个方法,可以直接复制整个虚拟环境到另一个服务器上......
  • Ingress nginx自定义错误页面
     Ingressnginx自定义错误页面的深度定制1、错误页面状态码网站运行过程中难免出现问题,为用户抛出一个错误页面,常见的错误页面包含403、404、500、502、503、504状态码,这些常见的错误页面状态码的含义如下403Forbidden404NotFound500InternalServerEroor502......
  • 移动端Vue2实现文件图片上传功能
    基于Vue2 +Vant2组件库实现:废话不多说,直接看代码:主要代码:methods:{//上传图片之前的操作beforeRead(file){letarr=file.name.split('.');letfileType='.'+arr[arr.length-1].toLowerCase();con......
  • 将打包后的 React或Vue 与 WebApi 部署在同一站点
    前后端分离的开发中,在部署项目时通常会分开进行部署,而这样又很麻烦,需要配置跨域,域名配置等等有一些情景下,我们需要采用更为方便的方式去部署,可以参考下方方法进行调整准备WebApi项目一个打包好的前端项目React或VUE都可以调整为WebApi项目新增wwwroot文件夹,用于放置前......
  • NetCore 3.1 大文件上传报错--413 Payload Too Large
    十年河东,十年河西,莫欺少年穷学无止境。,精益求精1、报错信息如下:RequestURL:https://xx.com/webapi/api/ad_video/UploadRequestMethod:POSTStatusCode:413PayloadTooLargeRemoteAddress:106.15.105.219:443ReferrerPolicy:strict-origin-when-cross-origin......