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

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

   }) 

在这里插入图片描述

后端工作就完成了

三、前端实现部分

前端实现下载

发布了61 篇原创文章 · 获赞 98 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/marendu/article/details/105269295