const Koa = require('koa');
const Router = require('koa-router');
const body = require('koa-body');
const cors = require('koa-cors');
const path = require('path');
const fs = require('fs');
const app = new Koa();
const router = new Router();
app.use(cors());
const koaBodyOptions = {
multipart: true,
encoding: 'gzip',
formidable: {
uploadDir: path.join(__dirname, './upload'),
keepExtensions: true, // 会直接保留原始的文件后缀
maxFileSize: 200 * 1024 * 1024, // 设置上传文件大小最大限制,默认2M
onFileBegin: (name, file) => {
// 获取文件后缀
const ext = getUploadFileExt(file.name);
// 最终要保存到的文件夹目录
// const dir = path.join(__dirname, `./upload/${getUploadDirName()}`);
// 检查文件夹是否存在如果不存在则新建文件夹
// checkDirExist(dir);
// 重新覆盖 file.path 属性
// file.path = `${dir}/${getUploadFileName(ext)}`;
},
onError: (err) => {
console.log(err);
}
}
}
/**
* 只是在upload添加上传中间件,其实也是可以直接use,因为koa-body包含了post请求
* application/json
* multipart/form-data
* application/application/x-www-form-urlencoded
*/
router.post('/upload', body(koaBodyOptions), async ctx => {
console.log(ctx.request.body);
console.log(ctx.request.files);
let { file01 } = ctx.request.files;
const reader = fs.createReadStream(file01.path);
let filePath = path.join(__dirname, './') + `${file01.name}`;
const upStream = fs.createWriteStream(filePath);
reader.pipe(upStream);
ctx.body = 'ok';
});
app.use(router.routes());
app.listen(9090);
// ========================================
/**
* 判断文件夹是否存在 如果不存在则创建文件夹
* @param {*} p
*/
function checkDirExist(p) {
if (!fs.existsSync(p)) {
fs.mkdirSync(p);
}
}
/**
* 获取文件的后缀
* @param {*} name
*/
function getUploadFileExt(name) {
let ext = name.split('.');
return ext[ext.length - 1];
}
koa上传文件
最新推荐文章于 2024-07-03 15:42:56 发布