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使用ajax方法获取指定url的head信息中指定字段值的方法
Mar 24 Javascript
JS在onclientclick里如何控制onclick的执行
May 30 Javascript
jQuery加载及解析XML文件的方法实例分析
Jan 22 Javascript
JavaScript实现打印星型金字塔功能实例分析
Sep 27 Javascript
尝试自己动手用react来写一个分页组件(小结)
Feb 09 Javascript
vue的常用组件操作方法应用分析
Apr 13 Javascript
解析vue data不可以使用箭头函数问题
Jul 03 Javascript
jQuery访问json文件中数据的方法示例
Jan 28 jQuery
JQuery中queue方法用法示例
Jan 31 jQuery
微信小程序实现消息框弹出动画
Apr 18 Javascript
node.js中Buffer缓冲器的原理与使用方法分析
Nov 23 Javascript
微信小程序调用wx.getImageInfo遇到的坑解决
May 31 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
PHP操作文件类的函数代码(文件和文件夹创建,复制,移动和删除)
2011/11/10 PHP
PHP中数字检测is_numeric与ctype_digit的区别介绍
2012/10/04 PHP
ThinkPHP的cookie和session冲突造成Cookie不能使用的解决方法
2014/07/01 PHP
PHP实现操作redis的封装类完整实例
2015/11/14 PHP
PHP实现对xml进行简单的增删改查(CRUD)操作示例
2017/05/19 PHP
Jquery显示、隐藏元素以及添加删除样式
2013/08/09 Javascript
js/jquery判断浏览器的方法小结
2014/09/02 Javascript
jQuery多文件异步上传带进度条实例代码
2016/08/16 Javascript
bootstrap switch开关组件使用方法详解
2017/08/22 Javascript
JS实现百度搜索接口及链接功能实例代码
2018/02/02 Javascript
手把手教你如何使用nodejs编写cli命令行
2018/11/05 NodeJs
NodeJS http模块用法示例【创建web服务器/客户端】
2019/11/05 NodeJs
Vue-cli assets SubDirectory及PublicPath区别详解
2020/08/18 Javascript
pyv8学习python和javascript变量进行交互
2013/12/04 Python
Python的动态重新封装的教程
2015/04/11 Python
Win7下搭建python开发环境图文教程(安装Python、pip、解释器)
2016/05/17 Python
浅析python协程相关概念
2018/01/20 Python
python在线编译器的简单原理及简单实现代码
2018/02/02 Python
Python使用pyh生成HTML文档的方法示例
2018/03/10 Python
linux下安装python3和对应的pip环境教程详解
2019/07/01 Python
python中zip()函数遍历多个列表方法
2021/02/18 Python
医学专业五年以上个人求职信
2013/12/03 职场文书
户外拓展活动方案
2014/02/11 职场文书
园艺师求职信
2014/04/27 职场文书
治超工作实施方案
2014/05/04 职场文书
党员学习中共十八大思想报告
2014/09/12 职场文书
财会专业大学生求职信
2014/09/26 职场文书
党员群众路线个人整改措施思想汇报
2014/10/12 职场文书
房屋出售授权委托书
2014/10/12 职场文书
安全先进个人材料
2014/12/29 职场文书
幼儿园学前班幼儿评语
2014/12/29 职场文书
冬季作息时间调整通知
2015/04/24 职场文书
入党转正申请报告
2015/05/15 职场文书
离职证明格式样本
2015/06/12 职场文书
运动员加油词
2015/07/18 职场文书
2015年“我们的节日·重阳节”活动总结
2015/07/29 职场文书