欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

koa实现下载和导出exsel表功能

程序员文章站 2022-06-15 15:01:44
...

koa实现下载和导出exsel表功能

一、 下载实现

第一种是用koa自带的实现下载

const fs = require("fs")
const Koa = require("koa")
const Bodyparser = require('koa-bodyparser');
const Formidable = require('koa2-formidable');
const Router = require("koa-router")
const koaStaticCache = require('koa-static-cache');
const app = new Koa()
const router = new Router()
// 解析post
app.use(Bodyparser())

// 解析formdata数据,否则ctx.request.body为空
app.use(Formidable())
app.use(koaStaticCache(__dirname+"/public",{
  prefix:'/public',
  gzip: true
}))
// 读取本地文件来下载 文件自己添加  路径是以服务器开启为根目录
var data = fs.readFileSync('public/user.xls',"utf-8")
router.post('/downLoad/:name',async(ctx)=>{
      //用于获取url上拼接的参数 用window.open下载时
   const name = ctx.params.name;
    //或者是表单提交from
    const data = ctx.requst.body
    //koa自带的下载
   ctx.set('Content-Type', 'application/vnd.openxmlformats');
ctx.set("Content-Disposition", "attachment; filename=" + "user.xlsx"); //这里是告诉浏览器下载一个附件,名字叫什么 自己动态定义
    //下载文件需要的是以buffer流,  这样前端点击下载就能直接下载了
 ctx.body = data
    
})

第二种下载 是用插件 koa-send

const fs = require("fs")
const Koa = require("koa")
const Bodyparser = require('koa-bodyparser');
const Formidable = require('koa2-formidable');
const Router = require("koa-router")
const koaStaticCache = require('koa-static-cache');
const app = new Koa()
const send = require('koa-send')
const router = new Router()
// 解析post
app.use(Bodyparser())

// 解析formdata数据,否则ctx.request.body为空
app.use(Formidable())
app.use(koaStaticCache(__dirname+"/public",{
  prefix:'/public',
  gzip: true
}))
// 读取本地文件来下载 文件自己添加  路径是以服务器开启为根目录
var data = fs.readFileSync('public/user.xls',"utf-8")
router.post('/downLoad:name',async(ctx)=>{
    //用于获取url上拼接的参数 用window.open下载时
   const name = ctx.params.name;
    //或者是表单提交from
    const data = ctx.requst.body
   //这样就可以直接下载文件了
  const path = "public/user.xls"
  ctx.attachment(path);
  await send(ctx, path);
    
})

二、导出exsel表

用中间件,excel-expor 或者node-xlsx

const fs = require("fs")
const Koa = require("koa")
const Bodyparser = require('koa-bodyparser');
const Formidable = require('koa2-formidable');
const Router = require("koa-router")
const nodeExcel = require('excel-export');
const koaStaticCache = require('koa-static-cache');
const app = new Koa()
const router = new Router()
// 解析post
app.use(Bodyparser())

// 解析formdata数据,否则ctx.request.body为空
app.use(Formidable())
app.use(koaStaticCache(__dirname+"/public",{
  prefix:'/public',
  gzip: true
}))
// 读取本地文件来下载 文件自己添加  路径是以服务器开启为根目录
var data = fs.readFileSync('public/user.xls',"utf-8")
router.post('/downLoad:name',async(ctx)=>{
    //用于获取url上拼接的参数 用window.open下载时
   const name = ctx.params.name;
    //或者是表单提交from
    const data = ctx.requst.body
   //这样就可以直接下载文件了
   const conf = {};
// 定义sheet名称 注意事项定义的不能为中文,否则导出会是个空文件
conf.name = "sheet";
    //下面是示例,数据根据查表自己创建
// 定义列的名称以及数据类型
conf.cols = [{
    caption:'姓名',
    type:'string'
},{
    caption:'性别',
    type:'string'
}, {
    caption:'年龄',
    type:'number'
    }
];

// 定义row的数据
conf.rows = [['小名','男',24],['小红','女','20'],['小军','未知','33']];
const result = nodeExcel.execute(conf);
console.log(typeof result)
const data =new Buffer(result,'binary');
// // fs将文件写到内存 路径是以服务器开启为根目录
fs.writeFile('public/text.xlsx',result,'binary',(err) => {
    err ? console.log(err) : null;
});
 ctx.set('Content-Type', 'application/vnd.openxmlformats');
ctx.set("Content-Disposition", "attachment; filename=" + "user.xlsx");
 ctx.body = data

   }) 

koa实现下载和导出exsel表功能

后端工作就完成了

三、前端实现部分

前端实现下载

相关标签: 全栈开发