【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>;
}
相关推荐
岛泪5 分钟前
把 el-cascader 的 options 平铺为一维数组(只要叶子节点)
前端·javascript·vue.js
lendsomething22 分钟前
graalvm使用实战:在java中执行js脚本
java·开发语言·javascript·graalvm
Kiyra1 小时前
阅读 Netty 源码关于 NioEventLoop 和 Channel 初始化部分的思考
运维·服务器·前端
冰暮流星1 小时前
javascript的switch语句介绍
java·前端·javascript
小简GoGo1 小时前
前端常用设计模式快速入门
javascript·设计模式
做科研的周师兄1 小时前
【MATLAB 实战】|多波段栅格数据提取部分波段均值——批量处理(NoData 修正 + 地理信息保真)_后附完整代码
前端·算法·机器学习·matlab·均值算法·分类·数据挖掘
da_vinci_x2 小时前
图标量产:从“手绘地狱”到“风格克隆”?Style Reference 的工业化实战
前端·游戏·ui·prompt·aigc·设计师·游戏美术
利刃大大2 小时前
【ES6】变量与常量 && 模板字符串 && 对象 && 解构赋值 && 箭头函数 && 数组 && 扩展运算符 && Promise/Await/Async
开发语言·前端·javascript·es6
天若有情6732 小时前
ES6 模块与 CommonJS 的区别详解
前端·javascript·es6
大猫会长2 小时前
postgreSQL中,RLS的using与with check
开发语言·前端·javascript