koa上传excel文件并解析的实现方法
1.中间键使用koa-body
npminstallkoa-body--save
constkoaBody=require('koa-body'); app.use(koaBody({ multipart:true, formidable:{ maxFileSize:200*1024*1024//设置上传文件大小最大限制,默认2M } }));
2.书写路由,croller书写方法
uploadData.js
consterrorResult=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,'暂时不支持多个sheet存在'); }else{//得到的是数组 constobjs=getRes.datas[0]; ctx.body={ status:true, msg:'上传数据成功' }; } }else{ errorResult.errorRes(ctx,getRes.msg); } awaitnext(); }; module.exports={ saveData };
3.处理excel存储,解析,处理excel用的库是xlsx
npminstallxlsx--save
uploadExcelSrv.js
//接收上传的excel文件,保存解析返回objects constxlsx=require('xlsx'); constfs=require('fs'); constpath=require('path'); 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(filePath);//创建可写流 constgetRes=awaitgetFile(reader,upStream);//等待数据存储完成 constdatas=[];//可能存在多个sheet的情况 if(!getRes){//没有问题 constworkbook=xlsx.readFile(filePath); constsheetNames=workbook.SheetNames;//返回['sheet1',...] for(constsheetNameofsheetNames){ constworksheet=workbook.Sheets[sheetName]; constdata=xlsx.utils.sheet_to_json(worksheet); datas.push(data); } return{ status:true, datas }; }else{ return{ status:false, msg:'上传文件错误' }; } } functiongetFile(reader,upStream){ returnnewPromise(function(result){ letstream=reader.pipe(upStream);//可读流通过管道写入可写流 stream.on('finish',function(err){ result(err); }); }); } module.exports={ getExcelObjs };
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。