koa2实现文件上传。
来源:互联网 发布:al软件平面设计教程 编辑:程序博客网 时间:2024/06/06 02:42
在使用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....');这样就完美的使用了中间件处理了文件上传。
阅读全文
1 0
- koa2实现文件上传。
- Koa2文件上传
- node koa2图片上传的实现
- Koa2-下载-文件流
- koa2实现mysql数据库分页
- javabean实现文件上传
- jsp实现文件上传
- spring实现文件上传
- 如何实现文件上传
- Javabean实现文件上传
- 多文件上传实现
- UploadBean实现上传文件
- struts--实现上传文件
- jsp实现文件上传
- jsp实现文件上传
- struts 实现文件上传
- struts 实现文件上传
- WebWork实现文件上传
- 腾讯首款战争策略手游「乱世王者」的兼容测试之路
- mui轮播使用问题
- spring-mvc 详解(二)处理器
- 计算机网络自顶向下--链路层
- MyBatis和Hibernate对比
- koa2实现文件上传。
- 带你搞懂朴素贝叶斯分类算法
- 在Eclipse中使用Maven方式编译Kettle 8.0
- angular基础
- 17101101_Windows系统通过FillZilla上传文件到linux系统方法
- Mongoose OS 的mos命令
- VS 2013 VS 2015的卸载方法& VS 2015社区版的安装失败记录
- 利用ThreadLocal管理request和session以及用户信息,实现 Use anywhere
- 《Effective C++》条款06