【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>;
}
相关推荐
FungLeo5 小时前
成为全栈·React 管理后台篇·总复盘:从“接口能调通”到“后台值得使用”
前端·react.js·前端框架·项目复盘·成为全栈
Csvn6 小时前
并发模式:让渲染学会排队、插队和让路
前端
可乐鸡翅yeah_6 小时前
新手梳理:M3U8 线上问题,哪些是前端锅,哪些是后端锅
前端·ios·音视频·实时音视频·m3u8·音视频在线播放
Flynt6 小时前
Linear 用 1000 个 PR 换掉 styled-components,我写了 200 个按钮,把这笔账复现了一遍
前端·css·preact
波力海苔夹心脆6756 小时前
C# 序列化与反序列化详解:System.Text.Json、Newtonsoft.Json、XmlSerializer 用法、特性选项与安全实践
经验分享·后端·c#·json·.net
JavaGuide7 小时前
NVIDIA 又开源了!这次给 AI Agent 加上权限管控
前端·后端
excel7 小时前
prisma 如何处理数据库竞态
前端·数据库·后端
莪_幻尘9 小时前
Skill 体检:30 个 Skill 全凭感觉?体检器先自曝了 8 个“假 0 分
前端·人工智能·llm
风骏时光牛马9 小时前
AI模型综合能力评测:性能、指令遵循与多场景实测对比
前端
Frag0ut9 小时前
Chrome与Chromium内核浏览器在Windows 11上的新特性全景解析
前端·chrome·windows·web安全·chromium·gemini ai·playready drm