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
};
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。