当前位置: 首页 > 后端技术 > Node.js

koa上传excel文件并解析

时间:2023-04-03 15:11:38 Node.js

1.使用koa-bodynpminstallkoa-body--saveconstkoaBody=require('koa-body');app.use(koaBody({multipart:true,formidable:{maxFileSize:200*1024*1024//设置最大上传文件大小限制,默认2M}}));2.写路由,scroller写法uploadData.jsconsterrorResult=require('../utils/errorResult.js');constuploadExcelSrv=require('../service/uploadExcelSrv');constsaveData=asyncfunction(ctx,next){constgetRes=awaituploadExcelSrv.getExcelObjs(ctx);if(getRes.status){if(getRes.datas.length>1){errorResult.errorRes(ctx,'暂不支持多张');}else{//结果是一个数组constobjs=getRes.datas[0];ctx.body={status:true,msg:'上传数据成功'};}}else{errorResult.errorRes(ctx,getRes.msg);}awaitnext();};module.exports={saveData};3.用于处理excel存储、解析、处理excel的库是xlsxnpminstallxlsx--saveuploadExcelSrv.js//接收上传的excel文件,保存解析并返回对象constxlsx=require('xlsx');constfs=require('fs');constpath=require('路径');constdownPath=path.resolve(__dirname,'../../fileUpload');asyncfunctiongetExcelObjs(ctx){constfile=ctx.request.files.file;//获取上传的文件constreader=fs.createReadStream(file.path);//创建一个可读流constext=file.name.split('.').pop();//获取上传文件的扩展名constfilePath=`${downPath}/${Math.random().toString()}.${ext}`;constupStream=fs.createWriteStream(文件路径);//创建一个可写流constgetRes=awaitgetFile(reader,upStream);//等待数据存储完成constdatas=[];//可能有多个sheetif(!getRes){//没问题constworkbook=xlsx.readFile(filePath);constsheetNames=workbook.SheetNames;//return['sheet1',...]for(constsheetNameofsheetNames){constworksheet=workbook.Sheets[sheetName];constdata=xlsx.utils.sheet_to_json(工作表);数据推送(数据);}return{status:true,datas};}else{return{status:false,msg:'上传文件错误'};}}functiongetFile(reader,upStream){返回新舞会ise(function(result){letstream=reader.pipe(upStream);//可读流通过管道传输到可写流stream.on('finish',function(err){result(err);});});}module.exports={getExcelObjs};