【Antd】基于 Upload 组件,导入Json文件并转换为Json数据

文章目录

组件封装

js 复制代码
import { Upload, message } from 'antd';

export default function JsonFileImport({ onFileImport }) {
  // 处理文件选择变化
  const handleChange = (info) => {
    // 从info对象中获取原始的File对象:cite[5]
    const rawFile = info.file.originFileObj || info.file;

    if (rawFile) {
      // 1. 创建FileReader读取文件
      const reader = new FileReader();
      reader.onload = (event) => {
        try {
          // 2. 将读取到的文本解析为JSON对象
          const parsedData = JSON.parse(event.target.result);
          // 3. 抛到父组件处理json数据
          onFileImport(parsedData);
          message.success(`${rawFile.name} 文件读取成功`);
        } catch (error) {
          message.error(`${rawFile.name} 文件不是有效的JSON格式`);
          console.error('JSON解析错误:', error);
          onFileImport(null);
        }
      };
      reader.onerror = () => {
        message.error(`读取文件 ${rawFile.name} 失败`);
        onFileImport(null);
      };
      // 4. 开始以文本形式读取文件
      reader.readAsText(rawFile);
    }
  };
  const uploadProps = {
    accept: '.json,.jsonl', // 可选:限制只能选择.json文件:cite[1]
    beforeUpload: () => false, // 阻止自动上传,直接返回文件对象:cite[4]
    onChange: handleChange,
    showUploadList: false, // 不显示默认的文件列表
  };

  return <Upload {...uploadProps}>文件导入</Upload>;
}
相关推荐
wangruofeng17 分钟前
2026 Web 技术选型指南,AI 时代如何选择适合项目的技术栈
前端·aigc·ai编程
honkun622 分钟前
vue 表格组件 vxe-table 修改滚动条样式,修改滚动条样式,统一宽度、颜色与自动隐藏
前端·javascript·vue.js
爱勇宝38 分钟前
研究数字孪生的这半年,做了个 Demo,也有了一些新想法
前端·程序员
不可能片场1 小时前
工程实践 一个缓存把选片从十分钟压到一分钟
前端·electron
前端小万1 小时前
探索副业五个月,最终以放弃告终
前端·后端·面试
FRing031 小时前
JavaScript入门到精通二十四(正则表达式、元字符、修饰符)
开发语言·前端·javascript·正则表达式
葡萄城技术团队2 小时前
在 SpreadJS 里新增右键菜单,把业务动作放到用户手边
前端
etafort2 小时前
js格式化json树结构
json
大明二代2 小时前
从 RAG 到有记忆的 Agent:Mastra Memory 与 PostgreSQL 实战
前端·javascript·人工智能
deli0072 小时前
代码截图一键出 PNG 实测:3 种窗口风格,长行超 95 字符会被裁
前端