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
})
后端工作就完成了
三、前端实现部分
上一篇: npm镜像源管理
推荐阅读