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>
.
