首页 > 其他分享 >ant design upload实现多个文件一次上传(全网首发)

ant design upload实现多个文件一次上传(全网首发)

时间:2023-04-16 11:33:58浏览次数:53  
标签:return list upload fileList ant design const any uploadFiles

前言

大家好 我是歌谣 在日常的学习生活中 我们会遇到各种各样的问题 今天在工作中就遇到了多个文件上传的时候会调用多次接口 感谢群友的帮助 想加入前端巅峰交流群可以私信我

ant design upload实现多个文件一次上传(全网首发)_Data

原因

一开始不知道原因 后来在群友的帮助下 最后知道了原因 是onChange的原因

上传中、完成、失败都会调用这个函数

思路解答

群友给的demo
import "./styles.css";
import React, { useState, useEffect, useRef } from "react";
import { Button, Upload } from "antd";
import { UploadOutlined } from "@ant-design/icons";
export default function App() {
  const fileState = useRef();
  const [uploadFiles, setUploadFiles] = useState([]);
  const updateFiles = (function () {
    let fileList;
    return function (list, setState) {
      if (!fileList) {
        fileList = list;
        setState && setState(list);
      }
      return {
        fileList,
        reset() {
          fileList = false;
        }
      };
    };
  })();

  function beforeUpload(_, fileList) {
    fileState.current = updateFiles(fileList, setUploadFiles);
    return false;
  }
  const customRequest = () => {
    console.log("自定义上传", uploadFiles);
  };

  useEffect(() => {
    if (uploadFiles.length > 0) {
      customRequest();
      fileState.current.reset();
    }
  }, [uploadFiles]);
  return (
    <div className="App">
      <h1>Hello CodeSandbox</h1>
      <h2>Start editing to see some magic happen!</h2>
      <Upload
        listType="picture"
        maxCount={3}
        multiple
        beforeUpload={beforeUpload}
      >
        <Button>Upload (Max: 3)</Button>
      </Upload>
    </div>
  );
}

ant design upload实现多个文件一次上传(全网首发)_上传_02

项目给的demo

upload部分

<Upload
                  name="file"
                  customRequest={customRequest}
                  multiple={true}
                  beforeUpload={beforeUpload}
                  headers={{ Authorization: getToken() || "" }}
                >
                  <Button style={{ width: "100%" }} icon={<UploadOutlined />}>
                    上传
                  </Button>
                </Upload>

beforeUpload部分

const fileState: any = useRef();
  const [uploadFiles, setUploadFiles] = useState([]);
  const updateFiles = (function () {
    let fileList: any = null;
    return function (list: any, setState: any) {
      if (!fileList) {
        fileList = list;
        setState && setState(list);
      }
      return {
        fileList,
        reset() {
          fileList = false;
        }
      };
    };
  })();
  useEffect(() => {
    if (uploadFiles.length > 0) {
      customRequest();
       fileState.current.reset();
    }
  }, [uploadFiles]);
  function beforeUpload(_: any, fileList: any) {
    fileState.current = updateFiles(fileList, setUploadFiles);
    return false;
  }
  const [loadingButton,setLoadingButton]=useState<boolean>(false)
  const customRequest = () => {
    let formData = new FormData();
    uploadFiles.forEach((file: any, index: any) => {
      formData.append(`file`, file
      );
    });
    uploadFile("manufacture/cutScheme/batchUploadDrawing", formData).then((res) => {
      if (res.code == 200) {
        setFileId(res.data.fileIdList)
        message.success("文件上传成功")
        setLoadingButton(false)
      } else {
        message.error(res.msg)
      }

    })
  };

解析部分

multiple多选文件

ant design upload实现多个文件一次上传(全网首发)_上传_03

return false控制只执行一次

ant design upload实现多个文件一次上传(全网首发)_App_04

customRequest

ant design upload实现多个文件一次上传(全网首发)_Data_05

formdata转文件格式

let formData = new FormData();
    uploadFiles.forEach((file: any, index: any) => {
      formData.append(`file`, file
      );

核心 hook写法

const updateFiles = (function () {
    let fileList: any = null;
    return function (list: any, setState: any) {
      if (!fileList) {
        fileList = list;
        setState && setState(list);
      }
      return {
        fileList,
        reset() {
          fileList = false;
        }
      };
    };
  })();

总结

我是歌谣 感谢生命中帮助你的每一个人 感谢山川~

标签:return,list,upload,fileList,ant,design,const,any,uploadFiles
From: https://blog.51cto.com/u_14476028/6193415

相关文章

  • PowerDesigner 导出的SQL脚本不带字段注释,解决办法
    问题PowerDesigner默认导出来的SQL没有注解。这一点是因为你没有添加Comment。新问题如果每个表都需要添加一个重复的Comment,那样太麻烦了。所以可以直接改他的模板,把Comment换成Name。原理类似于comment${comment}=>comment${name}菜单栏:Database>EditCurrentDB......
  • UVA1382 Distant Galaxy
    给出平面上的n个点,找一个矩形,使得边界上包含的点尽可能地多。 先维护前缀和col[i][j],row[i][j],表示i行前j个的和。。枚举上下边界,右边界,考虑维护左边届 #include<iostream>#include<cstring>#include<algorithm>usingnamespacestd;constintN=200;struct......
  • ant design table实现上下行拖拽功能(类组件)
    前言最好的种树是十年前,其次是现在。歌谣每天一个前端小知识提醒你改好好学习了知乎博主csdn博主b站博主放弃很容易但是坚持一定很酷我是歌谣喜欢就一键三连咯你得点赞是对歌谣最大的鼓励微信公众号关注前端小歌谣起始首先刚开始知道要书写一个这样的功能我的内心......
  • centos7 无法启动 修复​​Internal error XFS_WANT_CORRUPTED_GOTO​报错
    InternalerrorXFS_WANT_CORRUPTED_GOTO错误前面括号中的就是磁盘名称,比如我的就是dm-0修复完reboot重启就能进系统了......
  • 利用AntDesign中a-tree和checkbox构造组织单位人员树选择组件
    业务效果图核心代码<template><divclass="select-container"><a-modalv-model:visible="visible"@ok="handleOk"@cancel="handleCancel"width="1500px"><template#title>......
  • AntDesign中a-tab的forcerender属性强制DOM渲染
    <a-tabsv-model:activeKey="activeKey"@change="clickTag"><a-tab-panekey="1"tab="警情"v-if="tab01Visible":forceRender="true"><AssociatedElementsInformingDetail......
  • Semantic Kernel 入门系列:
    当我们使用NativeFunction的时候,除了处理一些基本的逻辑操作之外,更多的还是需要进行外部数据源和服务的对接,要么是获取相关的数据,要么是保存输出结果。这一过程在SemanticKernel中可以被归类为Connector。Connector更像是一种设计模式,并不像Function和Memory一样有强制和明确......
  • GUI-UPLOAD-上传txt
    *&---------------------------------------------------------------------**&ReportZ003*&*&---------------------------------------------------------------------**&*&*&------------------------------------------------------......
  • 使用appuploader工具发布证书和描述性文件教程
    使用APPuploader工具发布证书和描述性文件教程之前用AppCan平台开发了一个应用,平台可以同时生成安卓版和苹果版,想着也把这应用上架到AppStore试试,于是找同学借了个苹果开发者账号,但没那么简单,还要用到Mac电脑的钥匙串申请发布证书和上传ipa,可没有Mac,同学的大老远的也不方便拿过来......
  • 使用appuploader工具发布证书和描述性文件教程
     使用APPuploader工具发布证书和描述性文件教程之前用AppCan平台开发了一个应用,平台可以同时生成安卓版和苹果版,想着也把这应用上架到AppStore试试,于是找同学借了个苹果开发者账号,但没那么简单,还要用到Mac电脑的钥匙串申请发布证书和上传ipa,可没有Mac,同学的大老远的也不方......