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

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 文件,并获得实时的上传反馈。上传过程中的文件大小和格式验证确保了文件的正确性,而后端接口处理了文件上传的具体操作。


http://www.kler.cn/a/583407.html

相关文章:

  • 基于Redis实现限流
  • 蓝桥杯第三天:2023蓝桥杯省赛 第 1 题
  • Django系列教程(4)——实例项目任务管理小应用
  • 链上权益:基于区块链技术的数字版权管理革命
  • C#+AForge 实现视频录制
  • C#线程上异步执行(this.BeginInvoke)
  • 【CSS3】筑基篇
  • BambuStudio学习笔记:ModelArrange
  • Linux云计算SRE-第十八周
  • 基于OpenCV的车牌识别系统(源码+论文+部署教程)
  • 策略模式和责任链模式的区别
  • Day07 -实例 非http/s数据包抓取工具的使用:科来 wrieshark 封包监听工具
  • 《灵珠觉醒:从零到算法金仙的C++修炼》卷三·天劫试炼(33)玲珑宝塔藏珍宝 - 打家劫舍(空间压缩)
  • ubuntu24安装xinference
  • blazemeter工具使用--用于自动生成jmeter脚本并进行性能测试
  • 【使用VGG进行迁移学习:超参数调节与优化技巧】
  • Matlab 双线性插值(二维)
  • 有没有开源的企业网盘,是否适合企业使用?
  • search搜索框功能完善
  • prompt大师高效提示词解析