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>

    .

  • 相关阅读:
    vue computed watch 使用区别
    element 问题
    vue vue.config.js
    vue 路由
    算法
    《概率统计》10.变与不变:马尔科夫链的极限与稳态
    《概率统计》9.状态转移:初识马尔科夫链
    《概率统计》8.由静向动:随机过程导引
    《概率统计》7.统计推断:寻找最大似然与最大后验
    《概率统计》6.推断未知:统计推断的基本框架
  • 原文地址:https://www.cnblogs.com/crazycode2/p/12639737.html
Copyright © 2011-2022 走看看