koa2实现文件上传。
在使用koa2进行文件上传的时候,我写了一个中间件用来处理url,然而我在从新配置上传文件的url的时候,需要指定一下,upload.single('file'),这让我原来的url处理中间件会出错,才开始,我在中间件的Post那里做了个判断,如果url===“”uploadFile“”,增加upload.single('file'),然而上床文件没有什么反应。
最后突然看到,我的中间件那里可以自定义一个新的函数,让中间件函数处理的不是.js文件,而是自定义一个新的函数,专门用来处理文件上传,这样也不用在原来的主文件中增加代码,妨碍主文件的可读性。废话不说上代码:
controller.js
var fs = require('fs');
function addMapping(router,mapping) {for (var url in mapping) {if (url.startsWith('GET')) {//如果url类似GET ***var path = url.substring(4);router.get(path,mapping[url]);console.log(`register URL mapping:GET ${path}`);} else if (url.startsWith('POST')) {var path = url.substring(5);router.post(path,mapping[url]);console.log(`register URL mapping: POST ${path}`);} else if (url.startsWith('PUT')) {var path = url.substring(4);router.put(path,mapping[url]);console.log(`register URL mapping: PUT ${path}`);} else if (url.startsWith('DELETE')) {var path = url.substring(7);router.del(path,mapping[url]);console.log(`register URL mapping: DELETE ${path}`);}else {console.log(`invalid URL :${url}`);}}
}
function addControllers(router,dir) {//使用sync是因为启动时只用一次,不存在性能问题fs.readdirSync(__dirname + '/'+ dir).filter((f) => {//过滤出.js文件return f.endsWith('.js');}).forEach((f) => {console.log(`process controller:${f}...`);//导入js文件let mapping = require(__dirname + '/' + dir + '/' + f);addMapping(router,mapping);});
}
function addUploadFile(router) {//文件上传const multer = require('koa-multer');//配置var storage = multer.diskStorage({//文件保存路径destination:function (req,file,cb) {cb(null,'./public/uploads/img/')},filename:function (req,file,cb){var fileFormat = (file.originalname).split(".");cb(null,Date.now() + "." + fileFormat[fileFormat.length - 1]);}})var upload = multer({storage:storage});//upload.single('file')这里面的file是上传空间的name<input type="file" name="file"/> router.post('/uploadFile',upload.single('file'),async (ctx,next) => {ctx.response.body ="<h1>上传成功!</h1>";/*ctx.body = { filename: ctx.req.file.filename//返回文件名 } */ctx.redirect('/index');})console.log(`register URL mapping: POST /uploadFile`);
}
module.exports = function (dir) {let controllers_dir = dir || 'controllers',router = require('koa-router')();addControllers(router,controllers_dir);addUploadFile(router);return router.routes();
};
app.js
const Koa = require('koa');
const bodyParser = require('koa-bodyparser');
const controller = require('./controller');
const templating = require('./templating');
const app = new Koa();const isProduction = process.env.NODE_ENV === 'production';app.use(async(ctx,next) => {console.log(`Process ${ctx.request.method} ${ctx.request.url}...`);var start = new Date().getTime(), execTime; await next(); execTime = new Date().getTime() - start; ctx.response.set('X-Response-Time', `${execTime}ms`);
});app.use(bodyParser());app.use(templating('views',{noCache: !isProduction,watch: !isProduction
}));// static file support:
let staticFiles = require('./static-files');
app.use(staticFiles('/static/', __dirname + '/static')); app.use(controller());
app.listen(3000);
console.log('app started at port 3000....');
这样就完美的使用了中间件处理了文件上传。
koa2实现文件上传。相关推荐
- Koa2利用koa-body实现文件上传需要注意的问题
koa-body是一款为实现文件上传的中间件. 本文主要就利用该插件实现上传时遇到的问题进行些整理. 1 ctx.request.files.file ---------->终端提示undef ...
- VUE3+ElementPlus如何实现文件上传
VUE3+ElementPlus如何实现文件上传 使用elementplus 中的组件 el-upload 以上传单张图片为例: 使用el-upload <el-uploadref=" ...
- node 生产的env文件怎么注入_前端各种文件上传攻略,从小图片到大文件断点续传...
写在前面 今年国庆假期终于可以憋在家里了不用出门了,不用出去看后脑了,真的是一种享受.这么好的光阴怎么浪费,睡觉.吃饭.打豆豆这怎么可能(耍多了也烦),完全不符合我们程序员的作风,赶紧起来把文章写完. ...
- 写给新手前端的各种文件上传攻略,从小图片到大文件断点续传
写在前面 今年国庆假期终于可以憋在家里了不用出门了,不用出去看后脑了,真的是一种享受.这么好的光阴怎么浪费,睡觉.吃饭.打豆豆这怎么可能(耍多了也烦),完全不符合我们程序员的作风,赶紧起来把文章写完. ...
- 前端各种文件上传攻略,从小图片到大文件断点续传
写在前面 今年国庆假期终于可以憋在家里了不用出门了,不用出去看后脑了,真的是一种享受.这么好的光阴怎么浪费,睡觉.吃饭.打豆豆这怎么可能(耍多了也烦),完全不符合我们程序员的作风,赶紧起来把文章写完. ...
- springboot设置文件上传大小(tomcat默认1M)
application.yml # 设置文件上传大小(tomcat默认1M) server:tomcat:max-http-form-post-size: -1 spring:servlet:mult ...
- 将文件上传至ftp服务器,FTP文件上传工具类,将文件上传至服务器指定目录
将文件上传至ftp服务器,传入File对象,将文件上传至ftp服务器 需要配置修改的点: 1. 服务器ip端口(服务器ip 端口22/21). 2. 服务器账号密码(服务器登录用户名密码). 3. 上 ...
- Springboot 多文件上传
其实多个文件和单个文件上传是一样的,可以使用同一个Controller 添加依赖 <!-- https://mvnrepository.com/artifact/commons-fileuplo ...
- django文件上传
Django在处理文件上传时,文件数据被打包封装在request.FILES中. 一.简单上传 首先,写一个form模型,它必须包含一个FileField: # forms.py from djang ...
最新文章
- ruby gems列表
- 阿里云异构计算团队亮相英伟达2018 GTC大会
- 网络主机监控-nagios应用漫谈(三)
- ListView.setOnItemClickListener 点击无效
- H3C DHCP中继实验
- 企业微信应用权限签名api记录
- 济南 天然气 暖气 物业费 水费 电费价格
- ZK(1)——分布式系统概念与ZK简介
- MineCraft mod开发环境搭建
- 爬取徐州市自然资源和规划局土地数据
- 2023年2.14情人节最浪漫的表白烟花,送给自己的脑婆(源码)
- 【C++入门】静态成员详解(定义、实现原理、使用注意事项)
- 计算机故障声音,不同的电脑故障声音分别是什么意思【详解】
- 巧用千寻位置GNSS软件| 点放样操作指南
- Google Earth Engine(GEE)——Python干旱严重程度案例分析
- spring的 init-method和 destory-method方法
- MySQL(一): 初涉MySQL
- CSDN 如何修改用户名(CSDN ID)?
- 基于ROS2开发的点云体素化
- npm介绍与cnpm介绍