koa上传excel文件并解析的实现方法


Posted in Javascript onAugust 09, 2018

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
};

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js通过元素class名字获取元素集合的具体实现
Jan 06 Javascript
js实现select组件的选择输入过滤代码
Oct 14 Javascript
jquery实现兼容IE8的异步上传文件
Jun 15 Javascript
轻松实现javascript图片轮播特效
Jan 13 Javascript
基于jQuery倒计时插件实现团购秒杀效果
May 13 Javascript
Js 获取当前函数参数对象的实现代码
Jun 20 Javascript
用React实现一个完整的TodoList的示例代码
Oct 30 Javascript
jQuery中将json数据显示到页面表格的方法
May 27 jQuery
vueJs实现DOM加载完之后自动下拉到底部的实例代码
Aug 31 Javascript
微信小程序API—获取定位的详解
Apr 30 Javascript
JS实现动态无缝轮播
Jan 11 Javascript
解决Antd Table组件表头不对齐的问题
Oct 27 Javascript
使用layer弹窗和layui表单实现新增功能
Aug 09 #Javascript
vue-cli初始化项目中使用less的方法
Aug 09 #Javascript
video.js 实现视频只能后退不能快进的思路详解
Aug 09 #Javascript
JavaScript面向对象继承原理与实现方法分析
Aug 09 #Javascript
vue使用ajax获取后台数据进行显示的示例
Aug 09 #Javascript
vue中Axios的封装与API接口的管理详解
Aug 09 #Javascript
JavaScript引用类型RegExp基本用法详解
Aug 09 #Javascript
You might like
雄兵连:天使彦天使彦为爱折翼,彦和炙心同时念动的誓言!
2020/03/02 国漫
PHP5+UTF8多文件上传类
2008/10/17 PHP
从康盛产品(discuz)提取出来的模板类
2011/06/28 PHP
探讨如何在PHP开启gzip页面压缩实例
2013/06/09 PHP
解析PHP实现多进程并行执行脚本
2013/06/18 PHP
Yii实现显示静态页的方法
2016/04/25 PHP
PHP实现动态删除XML数据的方法示例
2018/03/30 PHP
Laravel用户授权系统的使用方法示例
2018/09/16 PHP
JQuery 常用方法基础教程
2009/02/06 Javascript
JavaScript中的View-Model使用介绍
2011/08/11 Javascript
利用Keydown事件阻止用户输入实现代码
2014/03/11 Javascript
JavaScript实现简洁的俄罗斯方块完整实例
2016/03/01 Javascript
Bootstrap项目实战之首页内容介绍(全)
2016/04/25 Javascript
微信小程序 开发工具快捷键整理
2016/10/31 Javascript
原生js获取浏览器窗口及元素宽高常用方法集合
2017/01/18 Javascript
Vue.js实现的表格增加删除demo示例
2018/05/22 Javascript
layui 表格操作列按钮动态显示的实现方法
2019/09/06 Javascript
JS document内容及样式操作完整示例
2020/01/14 Javascript
Python中input和raw_input的一点区别
2014/10/21 Python
python执行等待程序直到第二天零点的方法
2015/04/23 Python
常用python编程模板汇总
2016/02/12 Python
python spyder中读取txt为图片的方法
2018/04/27 Python
解决Python安装后pip不能用的问题
2018/06/12 Python
使用python批量化音乐文件格式转换的实例
2019/01/09 Python
PyTorch: 梯度下降及反向传播的实例详解
2019/08/20 Python
Python检查 云备份进程是否正常运行代码实例
2019/08/22 Python
如何理解Python中包的引入
2020/05/29 Python
前端canvas水印快速制作(附完整代码)
2019/09/19 HTML / CSS
英国豪华真皮和布艺沙发销售网站:Darlings of Chelsea
2018/01/05 全球购物
自荐信封面
2013/12/04 职场文书
应急管理培训方案
2014/06/12 职场文书
群众路线四风自我剖析材料
2014/10/08 职场文书
2014年工人工作总结
2014/11/25 职场文书
2014年小学少先队工作总结
2014/12/18 职场文书
拖欠货款起诉状
2015/05/20 职场文书
2015年教研工作总结
2015/05/23 职场文书