首页 > 其他分享 >前端实现导入,导出功能

前端实现导入,导出功能

时间:2022-12-26 14:22:22浏览次数:31  
标签:const 前端 导出 JSON json 导入 reject data

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>json导入导出</title>
  <style>
    * {
      padding: 0;
      margin: 0;
    }

    html,
    body {
      width: 100%;
      height: 100%;
    }

    .box {
      width: 100%;
      height: 100%;
      display: flex;
    }

    .main {
      width: 500px;
      margin-right: 20px;
    }

    .top {
      height: 50px;
      line-height: 50px;
      overflow: hidden;
    }

    .show-json {
      width: 500px;
      height: 600px;
      background-color: #f5f5f5;
      padding: 15px;
      box-sizing: border-box;
    }
  </style>
</head>

<body>
  <div class="box">
    <div class="main">
      <div class="top"><span>默认JSON数据</span><button id="exportBtn">导出数据</button></div>
      <pre class="show-json" id="exportBox"></pre>
    </div>
    <div class="main">
      <div class="top">
        <input type="file" name="file" id="importBtn">
      </div>
      <pre class="show-json" id="importBox" style="color: #f00;">导入的数据</pre>
    </div>
  </div>
</body>
<script>
  // 默认JSON数据
  const defaultData = {
    name: '赵二丫',
    age: 18,
    descript: '婷婷玉立',
    address: '河南省郑州市',
    iphone: '1234567788',
    worker: 'front-end',
    hobby: [{
      name: '动漫'
    }, {
      name: '游戏'
    }]

  }

  // 显示当前内容
  document.getElementById('exportBox').innerHTML = JSON.stringify(defaultData, null, 2);

  // 导出数据 --------------------------------------- Start
  /**
   * 导出JSON文件的方法,导出并直接进行下载
   * 
   * @param {Object|JSONString} 传入导出json文件的数据, 格式为json对象或者json字符串
   * @param {String}  导出json文件的文件名称
   */
  const exportFileJSON = (data = {}, filename = 'dataJSON.json') => {
    if (typeof data === 'object') {
      data = JSON.stringify(data, null, 4);
    }
    // 导出数据
    const blob = new Blob([data], {
        type: 'text/json'
      }),
      e = new MouseEvent('click'),
      a = document.createElement('a');

    a.download = filename;
    a.href = window.URL.createObjectURL(blob);
    a.dataset.downloadurl = ['text/json', a.download, a.href].join(':');
    a.dispatchEvent(e);
  }

  // 点击导出按钮
  document.getElementById('exportBtn').onclick = () => {
    exportFileJSON(defaultData, 'example.json');
  }

  // 导出数据 --------------------------------------- End
  // 导入数据 --------------------------------------- Start
  /**
   * 导入数据的方法
   * @param {EventObject} 传入的参数为onchange的事件源event
   * @returns 返回为promise,then为数据,reject为报错信息
   */
  const importFileJSON = (ev) => {
    return new Promise((resolve, reject) => {
      const fileDom = ev.target,
        file = fileDom.files[0];

      // 格式判断
      if (file.type !== 'application/json') {
        reject('仅允许上传json文件');
      }
      // 检验是否支持FileRender
      if (typeof FileReader === 'undefined') {
        reject('当前浏览器不支持FileReader');
      }

      // 执行后清空input的值,防止下次选择同一个文件不会触发onchange事件
      ev.target.value = '';

      // 执行读取json数据操作
      const reader = new FileReader();
      reader.readAsText(file); // 读取的结果还有其他读取方式,我认为text最为方便

      reader.onerror = (err) => {
        reject('json文件解析失败', err);
      }

      reader.onload = () => {
        const resultData = reader.result;
        if (resultData) {
          try {
            const importData = JSON.parse(resultData);
            resolve(importData);
          } catch (error) {
            reject('读取数据解析失败', error);
          }
        } else {
          reject('读取数据解析失败', error);
        }
      }
    });

  }
  // 回显数据
  const showImportData = (data) => {
    document.getElementById('importBox').innerHTML = JSON.stringify(data, null, 4);
  }
  // 导入文件的事件
  document.getElementById('importBtn').onchange = (event) => {
    importFileJSON(event).then((res) => {
      console.log('读取到的数据', res);
      // 回显数据
      showImportData(res);
    }).catch((err) => {
      console.log(err);
    });
  }

  // 导入数据 --------------------------------------- End
</script>

</html>

 

标签:const,前端,导出,JSON,json,导入,reject,data
From: https://www.cnblogs.com/yuwenjing0727/p/17005706.html

相关文章

  • 使 element-plus 在 vite 项目中自动导入
    title:使element-plus在vite项目中自动导入description:组件,图标tags:-vue-vitedate:2022-12-2510:54目录安装依赖vite配置使用安装依赖npmiel......
  • 一键导出Gerber文件教学实操,我设计的PCB再也没出过问题!
    我们正常设计PCB是如下的过程,PCB完成之后,会有一个自检,检查OK后,再导出gerber文件,gerber文件再导入到CAM350里面进行检查。在我看来,这中间有很多痛点:PCB设计软件虽带规则检查,......
  • 前端实现无感刷新token
    1.在axios返回拦截器中实现代码如下constservice=axios.create({baseURL:import.meta.env.VITE_API_BASEPATH,//api的base_urltimeout:600000,//请求超......
  • 下载Excel导出模板时设置下拉框
    一个需要导出的数据@DropDownSetField#source注入字符串,作为下拉框数据 @DropDownSetField#sourceClass 注入一个类,获取数据库等持久化数据,作为下拉框数据 @Datapu......
  • 14款web前端常用的富文本编辑器插件
    富文本编辑器是一种可内嵌于浏览器,所见即所得的文本编辑器。它提供类似于OfficeWord的编辑功能,方便那些不太懂html用户使用,富文本编辑器的应用非常广泛,它的历史与图文网页......
  • 巨蟒python全栈开发数据库前端1:HTML基础
     1.HTML介绍什么是前端?前端就是我们打开浏览器的页面.,很多公司都有自己的浏览器的页面,这个阶段学习的就是浏览器界面比如京东的界面:https://www.jd.com/ 引子例1 soc......
  • python之路55 cookie与session 操作 把模块变成字符串进行导入
    django中间件三个了解的方法1.process_view 路由匹配成功之后执行视图函数/类之前自动触发(顺序同process_request)2.process_exception 视图函数/类执行报错自动触发(......
  • SpreadJS集算表联动数据透视表,高效实现前端数据多维分析
    在做一些财务、供应链、资产管理等系统时,由于业务人员线下都是采用Excel来完成的,因此就需要将Excel中业务人员使用的功能都能在Web端系统实现,整体上的实现方案有三种:完全自......
  • 用Echarts实现前端表格引用从属关系可视化
    在金融行业,我们经常会有审计审查的需求,对某个计算结果进行审查,但是这个计算结果可能依赖多个单元格,而且会有会有多级依赖的情况,如果让我们的从业人员靠眼睛找,工作量巨大,而且......
  • 前端使用工具规范commit信息
    前言通过工具规范git提交信息也是工程化的一部分,在前端领域有一些工具为我们提供了相关功能,在这里做一下使用总结。commitlintcommitlint是什么?就像eslint用来检查js......