1.中间键使用 koa-body


  1. npm install koa-body --save

  1. const koaBody = require('koa-body');
  2. app.use(koaBody({
  3. multipart: true,
  4. formidable: {
  5. maxFileSize: 200 * 1024 * 1024 // 设置上传文件大小最大限制,默认2M
  6. }
  7. }));

2.书写路由,croller书写方法
uploadData.js


  1. const errorResult = require('../utils/errorResult.js');
  2. const uploadExcelSrv = require('../service/uploadExcelSrv');
  3. const saveData = async function (ctx, next) {
  4. const getRes = await uploadExcelSrv.getExcelObjs(ctx);
  5. if (getRes.status) {
  6. if (getRes.datas.length > 1) {
  7. errorResult.errorRes(ctx, '暂时不支持多个sheet存在');
  8. } else { //得到的是数组
  9. const objs = getRes.datas[0];
  10. ctx.body = {
  11. status: true,
  12. msg: '上传数据成功'
  13. };
  14. }
  15. } else {
  16. errorResult.errorRes(ctx, getRes.msg);
  17. }
  18. await next();
  19. };
  20. module.exports = {
  21. saveData
  22. };

3.处理excel存储,解析,处理excel用的库是 xlsx


  1. npm install xlsx --save

uploadExcelSrv.js


  1. //接收上传的excel文件,保存解析返回objects
  2. const xlsx = require('xlsx');
  3. const fs = require('fs');
  4. const path = require('path');
  5. const downPath = path.resolve(__dirname, '../../fileUpload');
  6. async function getExcelObjs (ctx) {
  7. const file = ctx.request.files.file; // 获取上传文件
  8. const reader = fs.createReadStream(file.path); // 创建可读流
  9. const ext = file.name.split('.').pop(); // 获取上传文件扩展名
  10. const filePath = `${downPath}/${Math.random().toString()}.${ext}`;
  11. const upStream = fs.createWriteStream(filePath); // 创建可写流
  12. const getRes = await getFile(reader, upStream); //等待数据存储完成
  13. const datas = []; //可能存在多个sheet的情况
  14. if (!getRes) { //没有问题
  15. const workbook = xlsx.readFile(filePath);
  16. const sheetNames = workbook.SheetNames; // 返回 ['sheet1', ...]
  17. for (const sheetName of sheetNames) {
  18. const worksheet = workbook.Sheets[sheetName];
  19. const data = xlsx.utils.sheet_to_json(worksheet);
  20. datas.push(data);
  21. }
  22. return {
  23. status: true,
  24. datas
  25. };
  26. } else {
  27. return {
  28. status: false,
  29. msg: '上传文件错误'
  30. };
  31. }
  32. }
  33. function getFile (reader, upStream) {
  34. return new Promise(function (result) {
  35. let stream = reader.pipe(upStream); // 可读流通过管道写入可写流
  36. stream.on('finish', function (err) {
  37. result(err);
  38. });
  39. });
  40. }
  41. module.exports = {
  42. getExcelObjs
  43. };

来源:https://segmentfault.com/a/1190000015943339

koa上传excel文件并解析的更多相关文章

  1. java上传excel文件及解析

      java上传excel文件及解析 CreateTime--2018年3月5日16:25:14 Author:Marydon 一.准备工作 1.1 文件上传插件:swfupload: 1.2 文件上 ...

  2. SpringMVC文件上传 Excle文件 Poi解析 验证 去重 并批量导入 MYSQL数据库

    SpringMVC文件上传 Excle文件 Poi解析并批量导入 MYSQL数据库  /** * 业务需求说明: * 1 批量导入成员 并且 自主创建账号 * 2 校验数据格式 且 重复导入提示 已被 ...

  3. ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案 try.dot.net 的正确使用姿势 .Net NPOI 根据excel模板导出excel、直接生成excel .Net NPOI 上传excel文件、提交后台获取excel里的数据

    ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案   ASP.NET Core 从2.2版本开始,采用了一个新的名为Endpoint的路由方案,与原来的方案在使用上差别不 ...

  4. Django框架(上传Excel文件并读取)

    博主今天整理下Django框架中上传Excel文件并读取 博主是要在管理平台中新增用例的维护功能,想着通过上传Excel文件来展示用例,下面是项目的路径图: 首先先建数据库模型 model.py 可以 ...

  5. js上传Excel文件

    一.问题 需要在项目里添加一个上传excel文件的功能,因为其他同样的后台里面有上传文件的功能,第一反应就是想着直接用.了解了一下发现它是利用bootstrap的fileinput实现的,但是我怎么都 ...

  6. java上传excel到后台解析入库

    背景:最近需要做一个excel模板导入的功能,以便用户可以自己增删改查数据,当然,只有特别的用户才能有此权限,捋了捋思路,还是从前端写起 实现: 页面最后的效果如下,可以自己修改,删除,导入导出数据, ...

  7. jmert中如何测试上传文件接口(测试上传excel文件)

    第一次用jmeter这个工具测试上传接口,以前没做过这一块,导致走了很多弯路.特地把经验谢谢,怕自己以后忘记... 一,jmeter如何上传文件 jmeter 的 http requests post ...

  8. asp.net上传Excel文件到服务端进行读取

    1.我们IIS是使用7.5,由于在网站中上传Excel文件到服务端进行数据读取时候出现读取失败情况.一开始以为是没有按照office软件问题,其实不然,因为server是64位操作系统,如果我们要使用 ...

  9. 基于Spring MVC实现基于form表单上传Excel文件,批量导入数据

    在pom.xml中引入: <!--处理2003 excel--> <dependency> <groupId>org.apache.poi</groupId& ...

随机推荐

  1. 常用es6特性归纳-(一般用这些就够了)

    之前做vue和react的时候,发现文档什么的最新版本都建议用es6写法,对es6友好度更高,加之现在es6也越来越普及,兼容性问题直接用babel转码就好了,特别方便,于是我开始学着用es6写代码, ...

  2. BZOJ 2165: 大楼

    Time Limit: 40 Sec Memory Limit: 259 MB Submit: 957 Solved: 353 [Submit][Status][Discuss] Descriptio ...

  3. 微信小程序发送手机验证码---倒计时

    var currentTime = 59 //倒计时的事件(单位:s)var interval = null //倒计时函数 Page({ data: { time:59 //倒计时 }, onLoa ...

  4. 关于解码芯片SAA7115及7105的配置 ,FVID与微驱动

    最近因为在做视频处理,所以和解码芯片打交道很多,根据DM642的例程总了一些应该配置的东西. 注:以下的配置均是指AV信号输入,PAL制式输出的条件 (一)关于SAA7115(基于TI的驱动) 结构体 ...

  5. css3之文本和颜色功能之text-shadow

    总本看一下 1.text-shadow 语法:text-shadow: h-shadow v-shadow blur color; h-shadow: 必需.水平阴影的位置.允许负值. v-shado ...

  6. VS2005连接MySQL C API

    1.在属性添加:附加目录,附加依赖库,附加库目录: 2.在stdafx.h中加入: #include <winsock.h> #include "mysql.h" 3. ...

  7. Web调取摄像头拍照

    调取摄像头.拍照 <!doctype html> <html lang="en"> <head> <meta charset=" ...

  8. Acesrc and Travel

    Acesrc and Travel 时间限制: 1 Sec  内存限制: 128 MB 题目描述 Acesrc is a famous tourist at Nanjing University se ...

  9. UVA11916 Emoogle Grid

    Emoogle Grid You have to color an M × N (1 ≤ M, N ≤ 108 ) two dimensional grid. You will be provided ...

  10. 彩色图像与二值图像(mask)点乘

    问题描述:给出一幅彩色图像和一张mask二值图像,其中mask和彩色图像大小相同,感兴趣的部分为1,其余部分为0,请用mask与彩色图像点乘,将感兴趣区域显示出来. 点乘的本质是mask中是二值图像, ...