当前位置: 首页 > 后端技术 > Node.js

koa图片上传

时间:2023-04-03 14:06:07 Node.js

本文使用图片上传展示koa中间件框架的基本流程,省去前端编码,直接使用httpie模拟文件上传,测试KoaKoa中间件按照编码顺序在栈中执行顺序(先进后出),允许您执行操作并向下(下游)传递请求,然后以相反的顺序(上游)过滤和返回响应。前端人员可以将next()之前的任何代码视为“捕获”阶段,下面的gif说明了异步函数如何正确地利用堆栈流来处理请求和响应流。当中间件(MiddlewareFunctionwithsignature(ctx,next))运行时,它必须手动调用next()来运行“下游”中间件。上传代码图片,需要指定上传路径(第5步),在web端访问和展示图片,需要开启静态资源服务(第1步)constlogger=require("koa-logger")constserve=require("koa-static")constkoaBody=require("koa-body")constKoa=require('koa')constfs=require("fs")constapp=newKoa()constos=require("os")constpath=require("path")app.use(logger())//使用文件上传中间件app.use(koaBody({multipart:true}))//1.静态资源服务,指定外部访问的根目录app.use(serve(path.join(__dirname,'/public')));app.use(asyncfunction(ctx,next){awaitnext()if(ctx.body||!ctx.idempotent)returnctx.response.body='

你好,koa2!

不上传照片

'})//2.文件上传app.use(asyncfunction(ctx,next){if('POST'!=ctx.method)returnawaitnext()//获取图像源//constfile=ctx.request.files.file//接收和读取流constreader=fs.createReadStream(file.path)//创建写入流//3.指定图片路径的文件名(即上传的图片存放目录)conststream=fs.createWriteStream(path.join('public/images',file.name))//使用管道将读取流“倒入”输入流reader.pipe(stream)//4.打印存储在服务器控制台上的上传文件的相对路径。log('uploading%s->%s',file.name,stream.path)//5.根据根目录重定向到静态资源web访问路径,显示图片ctx.redirect(stream.path.substr(6).replace(/\\/g,'/'))})//监听app.listen(3000,()=>{console.log("监听端口3000");})上传项目基本结构└─node_modules├─public└─images└─app.js执行nodeapp.js启动服务器监听端口3000执行httpie命令上传本地图片到服务器显示<--POST/uploadingpipe.png->public\images\pipe.png->POST/30273ms63b查看服务器的图片目录,同时前端可以直接通过localhost:3000/images/pipe.pngurl地址访问图片