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 相关文章推荐
Locate a File Using a File Open Dialog Box
Jun 18 Javascript
JavaScript 在各个浏览器中执行的耐性
Apr 06 Javascript
js自动查找select下拉的菜单并选择(示例代码)
Feb 26 Javascript
js图片模糊切换显示特效的方法
Feb 17 Javascript
javascript实现鼠标放上后下边对应内容变换的效果
Aug 06 Javascript
ES6新特性六:promise对象实例详解
Apr 21 Javascript
VUE v-for循环中每个item节点动态绑定不同函数的实例
Sep 26 Javascript
JS实现的贪吃蛇游戏案例详解
May 01 Javascript
微信小程序实现左滑动删除效果
Mar 30 Javascript
Vue中import from的来源及省略后缀与加载文件夹问题
Feb 09 Javascript
JS数组降维的实现Array.prototype.concat.apply([], arr)
Apr 28 Javascript
vue调用微信JSDK 扫一扫,相册等需要注意的事项
Jan 03 Vue.js
使用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
PHP 中的类
2006/10/09 PHP
用libtemplate实现静态网页生成
2006/10/09 PHP
用PHP实现浏览器点击下载TXT文档的方法详解
2013/06/02 PHP
详解WordPress开发中wp_title()函数的用法
2016/01/07 PHP
表单填写时用回车代替TAB的实现方法
2007/10/09 Javascript
Js 中debug方式
2010/02/07 Javascript
picChange 图片切换特效的函数代码
2010/05/06 Javascript
jQuery ajax cache缓存问题
2010/07/01 Javascript
详谈nodejs异步编程
2014/12/04 NodeJs
Js数组排序函数sort()介绍
2015/06/08 Javascript
JS中多种方式创建对象详解
2016/03/22 Javascript
JS基于HTML5的canvas标签实现炫目的色相球动画效果实例
2016/08/24 Javascript
vue+swiper实现组件化开发的实例代码
2017/10/26 Javascript
javaScript字符串工具类StringUtils详解
2017/12/08 Javascript
jQuery ajax仿Google自动提示SearchSuggess功能示例
2019/03/28 jQuery
SSM+layUI 根据登录信息显示不同的页面方法
2019/09/20 Javascript
Vue 中使用富文本编译器wangEditor3的方法
2019/09/26 Javascript
[47:20]DAC2018 4.4 淘汰赛 Optic vs Mineski 第一场
2018/04/05 DOTA
python中matplotlib实现最小二乘法拟合的过程详解
2017/07/11 Python
Pycharm导入Python包,模块的图文教程
2018/06/13 Python
使用python生成杨辉三角形的示例代码
2018/08/29 Python
python 单线程和异步协程工作方式解析
2019/09/28 Python
Python使用pickle进行序列化和反序列化的示例代码
2020/09/22 Python
详解CSS的border边框属性及其在CSS3中的新特性
2016/05/10 HTML / CSS
纯CSS实现菜单、导航栏的3D翻转动画效果
2014/04/23 HTML / CSS
CSS3 文字动画效果
2020/11/12 HTML / CSS
护理毕业生自荐信范文
2013/12/22 职场文书
服务员自我评价
2014/01/25 职场文书
中国梦主题教育活动总结
2014/05/05 职场文书
2015年采购员工作总结
2015/04/27 职场文书
公务员处分决定书
2015/06/25 职场文书
公司规章制度范本
2015/08/03 职场文书
党员干部学习心得体会
2016/01/23 职场文书
2016年“9.22”世界无车日活动小结
2016/04/05 职场文书
Html5调用企业微信的实现
2021/04/16 HTML / CSS
MySQL 角色(role)功能介绍
2021/04/24 MySQL