antd upload组件beforeUpload返回promise之后,获取的文件不是file类型导致上传失败

news2024/10/8 18:07:41

之前的beforeUpload直接返回一个false值 ,文件是可以正常与服务端进行传输的


  beforeUpload: (file) => {
       return false
    },

在这里插入图片描述

但是这样并不能阻止文件上传,看了官方文档后,改用返回promise对象上传

 beforeUpload: (file) => {
      console.log('-beforeUploadfile========', file)
      return new Promise(async (resolve, reject) => {
        importExcel(file).then(res => {
          let list = res[0].data // 去除表头
          list.splice(0, 1)
          list.splice(list.length - 1, 1)
          let reslist = _.cloneDeep(list)
          reslist.forEach((item, index) => {
            // 如果数据中有空字段,删除此条数据
            item.forEach(eItem => {
              if (!eItem.cont) { // 如果三项中一其值为空即删除
                // reslist.splice(index, 1)
                result = false
              }

            })
          })
          // 如果数据已有此条数据,删除此条数据
          let arr = changeplan.permatmac.person;
          arr.forEach((item) => {
            for (let i = reslist.length - 1; i >= 0; i--) {
              const ele = reslist[i]
              if (item.name === ele[0].cont) {
                // reslist.splice(i, 1);
                result = false

              }
            }
          })

          if (!result) {
            message.warning('导入文件不合法!可能包含空白字段与重复数据!')
            return false
          }
          resolve();
          return true;
        })

      })
      // return false
    },

我们发现 ,现在可以阻止上传了,但是传给服务端的文件不是二进制的,而变成了一个object,所以报错了

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

然后尝试把这个object转换成二进制流,发现依然报错

      let formData = toformdata({
        file: new Blob([JSON.stringify(fileList[0])])
      });

在这里插入图片描述

再后来又仔细阅读了文档 ,发现了这段,于是尝试在resolve时把对象返回去,依然报错……


resolve(file)

在这里插入图片描述

再看到最后,一开始没理解 这个originFileObj是啥,打印了一下info.file.originFileObj,发现这就是我们想要的那个file文件
在这里插入图片描述

    onChange: (file) => {
      console.log('onChange-file', file)
      // console.log('file.file.originFileObj', file.file.originFileObj)
      setfileList([file.file]); // 这是beforeUpload返回false值时所用到的赋值
      console.log('onchenage', fileList)
    },

所以我们直接把info.file.originFileObj赋值给filelist就好了……

    onChange: (file) => {
      console.log('onChange-file', file)
      console.log('file.file.originFileObj', file.file.originFileObj)
      setfileList([file.file.originFileObj]);
      console.log('onchenage', fileList)
    },

真无语,一个版本问题,解决了一上午,尝试各种办法,结果人家文档里写了……

贴一下完整代码吧哈哈哈哈

const uploadprops = {
    multiple: false,
    accept: '.xlsx',
    onChange: (file) => {
      console.log('onChange-file', file)
      console.log('file.file.originFileObj', file.file.originFileObj)
      setfileList([file.file.originFileObj]);
      console.log('onchenage', fileList)
    },
    onRemove: (file) => {
      const index = fileList.indexOf(file);
      const newFileList = fileList.slice();
      newFileList.splice(index, 1);
      setfileList(newFileList);
    },

    beforeUpload: (file) => {
      console.log('-beforeUploadfile========', file)
      return new Promise(async (resolve, reject) => {
        importExcel(file).then(res => {
          let list = res[0].data // 去除表头
          list.splice(0, 1)
          list.splice(list.length - 1, 1)
          let reslist = _.cloneDeep(list)
          reslist.forEach((item, index) => {
            // 如果数据中有空字段,删除此条数据
            item.forEach(eItem => {
              if (!eItem.cont) { // 如果三项中一其值为空即删除
                // reslist.splice(index, 1)
                result = false
              }

            })
          })
          // 如果数据已有此条数据,删除此条数据
          let arr = changeplan.permatmac.person;
          arr.forEach((item) => {
            for (let i = reslist.length - 1; i >= 0; i--) {
              const ele = reslist[i]
              if (item.name === ele[0].cont) {
                // reslist.splice(i, 1);
                result = false

              }
            }
          })

          if (!result) {
            message.warning('导入文件不合法!可能包含空白字段与重复数据!')
            return false
          }
          resolve();
          return true;
        })

      })
      // return false
    },
    fileList,
  }; // 上传组件的配置参数

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

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

相关文章

Primeng table filter 重置条件

我用一个overlayPanel装了p-table,里面有个count的filter,但是我设置值之后,让overlayPanel消失,再出现的时候,明明已经重新设置了表里面的数据和filter的变量值,但是上一次的条件仍然在,旁边的文字filter依…

openGauss本地Centos7.6单机安装和简单应用

openGauss本地Centos7.6单机安装和简单应用 openGauss基础环境配置openGauss安装openGauss使用测试openGauss常用命令 openGauss基础环境配置 在VMware Workstation中安装一台 centos7.6 内存:8GB,亲测4GB安装不够 磁盘:测试50GB-100GB够用 …

谈了千百遍的数据一致性

今天来说一个老生常谈的问题,来看一个实际案例: 现有业务中往往都会通过缓存来提高查询效率,降低数据库的压力,尤其是在分布式高并发场景下,大量的请求直接访问Mysql很容易造成性能问题。 有一天老板找到了你… 老板…

四川玖璨电子商务有限公司:开抖店怎么运营

开抖店是一种越来越流行的创业方式,在社交媒体平台上开店销售各种商品,比如服装、配饰、美妆和家居用品等等。对于新手来说,他们可能会很关心自己开抖店能够多久出单。虽然这个问题没有一个固定的答案,但是以下是一些关键的运营方…

一文讲透:低代码平台是什么?低代码平台应该如何挑选?

低代码平台是什么?低代码平台的边界在哪?低代码平台的优势?低代码平台哪个好用?2023年有哪些国内值得关注的低代码平台?本文将深入浅出的带大家了解低代码平台,并且为大家带来2023年国内最热六款低代码平台…

【MySQL系列】-ORDER BY……HAVING详解及limit

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …

【ELK日志收集系统】

目录 一、概述 1.作用 2.为什么使用? 二、组件 1.elasticsearch 1.1 作用 1.2 特点 2.logstash 2.1 作用 2.2 工作过程 2.3 INPUT 2.4 FILETER 2.5 OUTPUTS 3.kibana 三、架构类型 1.ELK 2.ELKK 3.ELFK 4.ELFKK 四、案例 - 构建ELK集群 1.环境…

【行为树】py_trees 学习笔记

学习资料 《Introduction to behavior trees》 1. 概念说明 1.1 Action:pt.behaviour.Behaviour 在一个行为树中,Action 是一个叶节点(Leaf Node),它实际执行某种行为或任务,并返回成功、失败或运行中的…

微服务·架构组件之注册与发现

引言 微服务架构在现代软件开发中越来越受欢迎,它通过将系统拆分为多个小型、自治的服务来提高可维护性、可扩展性和灵活性。然而随着服务数量的增多,服务之间的通信何发现变得更加复杂。本报告旨在深入探讨微服务中的注册与发现,介绍其背景…

使用rem + sass + 媒体查询 进行横竖屏适配移动端项目

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、 媒体查询(Media Query)1.简单了解2.简单例子3. 语法(1)媒体类型(mediatype )&#xff0…

【黑科技】游戏开发程序员必备工具【一】

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:效率…

MongoDB实验——在Java应用程序中操作 MongoDB 数据

在Java应用程序中操作 MongoDB 数据 1. 启动MongoDB Shell 2. 切换到admin数据库,使用root账户 3.开启Eclipse,创建Java Project项目,命名为MongoJava File --> New --> Java Project 4.在MongoJava项目下新建包,包名为mo…

【SpringBoot系列】 测试框架之@SpringBootTest的使用

SpringBootTest的详细介绍 SpringBootTest 是 Spring Boot 测试框架中的注解,用于标识一个测试类,以指示该类是一个 Spring Boot 应用程序的测试类。它允许你在测试环境中加载整个 Spring Boot 应用程序上下文,测试应用程序的各种组件、服务…

如何备考 PMP 考试?

一、PMP学习7步走攻略 ​1、熟悉考试大纲: PMP考试大纲是备考的基础,考生需要详细熟悉考试大纲,了解各个知识领域的重点和难点。 2、制定学习计划: 根据考试大纲和个人情况,制定学习计划,合理分配学习时间…

OA项目之我的会议(查询会议排座送审)

目录 会议查询 会议排座 会议送审 思路: 关键性会议SQL的编写后台实现前台实现 会议查询 MeetingInfoDao.java // 通用的会议查询SQL语句,包含会议信息表数据,主持人姓名、审批人姓名、会议状态private String getSQL() {return "…

android:新建工程文件介绍

一、前言当我们新建一个app时会呈现出固定的工程文件,这篇文章介绍新建工程里的文件。 二、介绍 Structure:就是你选择哪个页面就会显示那个页面的结构,就比如说我选择的是MainActivity他就会显示这个页面所使用的方法。 1-2:是android自动生…

【ESP32】解决接串口助手时,无法启动问题

本文主要记录ESP32正常烧录程序后,接上串口助手就无法启动,报错 waiting for download,拔掉串口助手后,程序可以正常启动 📋 个人简介 💖 作者简介:大家好,我是喜欢记录零碎知识点的…

小程序隐私保护授权处理方式之弹窗组件

欢迎点击关注-前端面试进阶指南:前端登顶之巅-最全面的前端知识点梳理总结 *分享一个使用比较久的🪜 小程序隐私保护授权弹窗组件 调用wx.getUserProfile进行授权时,返回错误信息:{errMsg: “getUserProfile:fail api scope is…

nvm和volta对node版本控制的区别

前言——我们做前端开发的都会需要node.js环境,我们直接安装指定的版本可以么?可以,只不过在需要换版本的时候还得卸载重新装。那有工具可以帮助我们不用卸载就更改node版本么?有啊,nvm就可以。那又有没有什么工具不用…

高忆管理:沪指震荡微涨,半导体板块走强,卫星导航概念拉升

30日早盘,A股两市维持震动格式。到午间收盘,沪指涨0.06%报3137.72点,深成指涨0.33%,创业板指涨0.12%,两市合计成交6424亿元。北向资金净流出8.82亿元。盘面上,半导体、纺织机械、元器件、通信设备、软件服务…