当前位置: 首页 > news >正文

4-文件导入功能文档

文件导入功能文档

文章目录

      • 文件导入功能文档
        • 1. 功能概述
        • 2. 使用的技术
        • 3. 主要功能
        • 4. 代码实现
          • 4.1 前端代码实现
          • 4.2 后端接口代码实现
        • 5. 用户操作流程
        • 6. 注意事项
        • 7. 总结
        • 6. 注意事项
        • 7. 总结

1. 功能概述

本功能允许用户通过文件上传,将 Excel 文件(.xlsx.xls 格式)传递给后端进行处理。文件上传前,系统会对文件进行大小和类型的验证,上传成功后,后台会返回相应的状态信息,前端根据这些信息反馈给用户上传结果。

2. 使用的技术
  • 前端技术:React、Ant Design(Upload 组件)
  • 后端接口:接口接收文件并进行相应处理,文件通过 FormData 发送。
  • 文件格式:支持 .xlsx.xls 格式的 Excel 文件。
3. 主要功能
  1. 文件选择:用户点击上传按钮选择文件。
  2. 文件验证:限制文件大小为 2MB 以下,且仅支持 .xlsx.xls 格式。
  3. 文件上传:将选中的文件通过自定义上传函数发送至后端接口。
  4. 上传反馈:根据后端响应,显示上传成功或失败的消息。
4. 代码实现
4.1 前端代码实现
  1. 上传组件配置

    使用 Ant Design 的 Upload 组件,配置自定义上传函数和文件验证规则:

    import { Upload, message } from 'antd';
    import { UploadProps } from 'antd/es/upload';
    
    const props: UploadProps = {
      name: 'file', // 设置上传的字段名为 'file',与后端接收的字段名一致
      customRequest: async ({ file, onSuccess, onError }) => {
        try {
          // 创建 FormData 对象,封装文件和其它请求参数
          const formData = new FormData();
          formData.append('file', file); // 将文件添加到 FormData 中
    
          // 调用后端接口上传文件
          const response = await CodeTable.mabiaoguanli.uploadCodeTableUsingPost({}, file);
    
          // 根据响应状态判断上传是否成功
          if (response.code === 100200) {
            message.success(`${file.name} 文件上传成功`);
            onSuccess(response); // 通知 Upload 组件上传成功
            actionRef.current?.reload(); // 上传成功后,重新加载表格数据
          } else {
            message.error(`${file.name} 文件上传失败: ${response.msg}`);
            onError(new Error('上传失败')); // 通知 Upload 组件上传失败
          }
        } catch (error) {
          message.error(`${file.name} 文件上传出错`);
          onError(error); // 通知 Upload 组件上传出错
        }
      },
      accept: '.xlsx,.xls', // 限制只能上传 Excel 文件
      beforeUpload(file) {
        // 限制文件大小,最大为 2MB
        const isLt2M = file.size / 1024 / 1024 < 2;
        if (!isLt2M) {
          message.error('文件大小必须小于 2MB!');
        }
        return isLt2M; // 如果文件符合条件,允许上传
      },
    };
    

    展开

  2. 上传功能说明

    • 自定义上传处理函数 (customRequest)
      • 文件选择后,会触发 customRequest 方法,将文件通过 FormData 对象封装,并通过 uploadCodeTableUsingPost 方法调用后端接口上传文件。
      • 上传后,根据返回的响应数据(response.code)判断上传是否成功,并进行相应的反馈。
    • 上传前验证 (beforeUpload)
      • 限制文件大小为 2MB,文件大小大于 2MB 会提示错误信息,并阻止上传。
4.2 后端接口代码实现
  1. 接口设计

    后端接口用于接收上传的文件。通过 FormData 获取文件,并处理上传逻辑。代码示例如下:

    export async function uploadCodeTableUsingPost(
      body: {},
      file?: File,
      options?: { [key: string]: any },
    ) {
      const formData = new FormData();
    
      // 如果文件存在,将其添加到 FormData 中
      if (file) {
        formData.append('file', file);
      }
    
      // 将其他请求参数添加到 FormData 中
      Object.keys(body).forEach((ele) => {
        const item = (body as any)[ele];
    
        if (item !== undefined && item !== null) {
          if (typeof item === 'object' && !(item instanceof File)) {
            if (item instanceof Array) {
              item.forEach((f) => formData.append(ele, f || ''));
            } else {
              formData.append(ele, JSON.stringify(item));
            }
          } else {
            formData.append(ele, item);
          }
        }
      });
    
      // 返回 formData 对象,交给前端处理上传
      return formData;
    }
    

    展开

    • uploadCodeTableUsingPost 方法:
      • 该方法接收文件和其他请求参数,封装成 FormData 对象并上传至后端。
      • 后端处理上传逻辑并返回上传结果。
5. 用户操作流程
  1. 选择文件:点击上传按钮,选择需要上传的 Excel 文件。
  2. 验证文件:系统会自动验证文件大小和格式。如果文件不符合条件,会提示用户相应的错误信息。
  3. 上传文件:文件通过自定义上传函数发送至后端接口。
  4. 上传结果:上传完成后,系统会根据后端返回的信息显示上传成功或失败的提示。
6. 注意事项
  • 确保文件的格式为 .xlsx.xls,并且大小不超过 2MB。
  • 如果上传过程中出现任何错误,系统会显示相应的错误提示,帮助用户定位问题。
7. 总结

成后,系统会根据后端返回的信息显示上传成功或失败的提示。

6. 注意事项
  • 确保文件的格式为 .xlsx.xls,并且大小不超过 2MB。
  • 如果上传过程中出现任何错误,系统会显示相应的错误提示,帮助用户定位问题。
7. 总结

通过以上功能实现,用户可以方便地上传 Excel 文件,并获得实时的上传反馈。上传过程中的文件大小和格式验证确保了文件的正确性,而后端接口处理了文件上传的具体操作。

相关文章:

  • 零成本本地化搭建开源AI神器LocalAI支持CPU推理运行部署方案
  • Redis 集合(Set)
  • HTTP 各版本协议简介
  • kotlin与MVVM的结合使用总结(三)
  • 深度学习之卷积神经网络(CNN)
  • 跨国企业网络案例分析:SD-WAN智能组网
  • 用DasViewer的时候3Dtiles 转osgb 可以直接指定目标坐标系吗?
  • 电路原理(电容 集成电路NE555)
  • python学习笔记
  • ROS实践(五)机器人自动导航(robot_navigation)
  • Science Advances 视触觉传感机制的交互装置,可以实时测量来自手不同部位的分布力
  • OSPF-2 邻接建立关系
  • CentOS7安装DNS服务器bind
  • 为什么 NFS 不适合作为 TDengine 的数据存储
  • 在使用element-ui时表单的表头在切换页面时第一次进入页面容易是白色字体解决方法
  • SSR 框架是什么?
  • C#中继承的核心定义‌
  • 创新实践分享:基于边缘智能+扣子的智能取物机器人解决方案
  • PHP语言的开源贡献
  • MFCday01、模式对话框
  • 网警打谣:传播涉刘国梁不实信息,2人被处罚
  • 专访|《内沙》导演杨弋枢:挽留终将失去的美好
  • 七猫征文大赛颁出112万奖金,非遗题材作品斩获金奖
  • 王伟妻子人民日报撰文:81192,一架永不停航的战机
  • 商务部回应稀土出口管制问题
  • 张涌任西安市委常委,已卸任西安市副市长职务