koa上传excel文件并解析的实现方法
程序员文章站
2022-06-05 21:34:02
1.中间键使用 koa-body
npm install koa-body --save
const koabody = require('koa-...
1.中间键使用 koa-body
npm install koa-body --save
const koabody = require('koa-body'); app.use(koabody({ multipart: true, formidable: { maxfilesize: 200 * 1024 * 1024 // 设置上传文件大小最大限制,默认2m } }));
2.书写路由,croller书写方法
uploaddata.js
const errorresult = require('../utils/errorresult.js'); const uploadexcelsrv = require('../service/uploadexcelsrv'); const savedata = async function (ctx, next) { const getres = await uploadexcelsrv.getexcelobjs(ctx); if (getres.status) { if (getres.datas.length > 1) { errorresult.errorres(ctx, '暂时不支持多个sheet存在'); } else { //得到的是数组 const objs = getres.datas[0]; ctx.body = { status: true, msg: '上传数据成功' }; } } else { errorresult.errorres(ctx, getres.msg); } await next(); }; module.exports = { savedata };
3.处理excel存储,解析,处理excel用的库是 xlsx
npm install xlsx --save
uploadexcelsrv.js
//接收上传的excel文件,保存解析返回objects const xlsx = require('xlsx'); const fs = require('fs'); const path = require('path'); const downpath = path.resolve(__dirname, '../../fileupload'); async function getexcelobjs (ctx) { const file = ctx.request.files.file; // 获取上传文件 const reader = fs.createreadstream(file.path); // 创建可读流 const ext = file.name.split('.').pop(); // 获取上传文件扩展名 const filepath = `${downpath}/${math.random().tostring()}.${ext}`; const upstream = fs.createwritestream(filepath); // 创建可写流 const getres = await getfile(reader, upstream); //等待数据存储完成 const datas = []; //可能存在多个sheet的情况 if (!getres) { //没有问题 const workbook = xlsx.readfile(filepath); const sheetnames = workbook.sheetnames; // 返回 ['sheet1', ...] for (const sheetname of sheetnames) { const worksheet = workbook.sheets[sheetname]; const data = xlsx.utils.sheet_to_json(worksheet); datas.push(data); } return { status: true, datas }; } else { return { status: false, msg: '上传文件错误' }; } } function getfile (reader, upstream) { return new promise(function (result) { let stream = reader.pipe(upstream); // 可读流通过管道写入可写流 stream.on('finish', function (err) { result(err); }); }); } module.exports = { getexcelobjs };
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: SQL SERVER的优化建议与方法
下一篇: thinkphp四种url访问方式详解