zoukankan      html  css  js  c++  java
  • egg 实现上传excel,并解析保存到数据库

    1.安装 xlsx

    yarn add xlsx --save-dev

    2.创建工具类

    app/controller/tools.js

    'use strict';
    
    const Controller = require('egg').Controller;
    const XLSX = require('xlsx');
    
    class ToolsController extends Controller {
      async importExcel() {
        const { ctx } = this;
        // 获取额外参数
        const { headerMap, type } = ctx.request.body;
        // 获取文件对象
        const file = ctx.request.files[0];
        try {
          // 每行数据要进行的特殊处理函数
          const rowTransform = (row) => ({
            ...row,
            // mobile: row.mobile.toString(),
          });
          // 将文件解析成js数据,上边封装的可复用的解析函数
          const importData = ctx.helper.getImportXLSXData(file, JSON.parse(headerMap), rowTransform);
    
          // 初步校验通过,导入数据库,返回结果
          let result;
          if(type === 'forum'){
            result = await ctx.service.diary.import(importData)
          }
          ctx.success({
            data: result,
            message: '导入excel数据成功'
          });
        } catch (error) {
          ctx.badRequest({
            data: {},
            message: '导入excel数据失败',
          });
        }
      }
    }
    
    module.exports = ToolsController;

    3.配置路由

    // 上传excel文件
    router.post('/tools/excel/import', jwt, controller.tools.importExcel);

    4.页面调用

    <Upload
      name="excel"
      // listType="text"
      accept=".xlsx"
      showUploadList={false}
      action={`${BaseUrl}/tools/excel/import`}
      headers={{
        Authorization: `Bearer ${window.sessionStorage.getItem("x-user-token")}`
      }}
      data={{
        headerMap: JSON.stringify({
          '用户ID': 'user_id',
          '标题': 'title',
          '内容': 'content',
        }),
        type: 'forum'
      }}
      beforeUpload={beforeUpload}
      onChange={this.handleChange}
    >
      <Button
        type="primary"
        icon="upload"
        loading={loading}
      >{title}</Button>
    </Upload>

    .

  • 相关阅读:
    CF575A Fibonotci [线段树+矩阵快速幂]
    P3768 简单的数学题 [杜教筛,莫比乌斯反演]
    2-SAT 学习笔记
    CF776D The Door Problem [2sat]
    KD-Tree 学习笔记
    Mybatis入门笔记(2)——基于代理Dao实现CRUD
    Mybatis入门笔记(1)——基于原始dao实现CRUD
    mybatis入门看这一篇就够了
    使用JDBC程序的问题总结
    关于递归你知道多少?
  • 原文地址:https://www.cnblogs.com/crazycode2/p/12639737.html
Copyright © 2011-2022 走看看