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>

.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM