返回

koa上传文件

发布时间:2022-10-12 00:47:04 404
# json
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];
}

 

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线
下一篇
Anaconda 修改源配置 2022-10-12 00:08:33