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

koa-body,nodejskoa中间件文件上传,构建文件服务

时间:2023-04-03 11:34:04 Node.js

前言koa是node服务的解决方案,koa-body是koa的中间件,对文件上传和POSTJSON友好,设置json的大小和上传文件的大小。koa-static根据静态文件访问需求,提供上传图片的接口,并根据当前日期保存文件目录“年/月/SDK_20190904153509.png”,以分年分月管理文件。installnpminstallkoakoa-routernpminstallkoa-bodynpminstallkoa-static//保存到本地项目,需要加上后缀--save-devapp.jsconstkoa=require("koa")constRouter=require('koa-router')constkoaBody=require('koa-body')constkoaStatic=require('koa-static')const{upload}=require('upload.js')constrouter=newRouter()constapp=newkoa()//koa-body中间插件文件提交和form-dataapp.use(koaBody({formLimit:'1mb',multipart:true,//允许上传多个文件formidable:{maxFileSize:200*1024*1024//上传文件大小keepExtensions:true,//保存图片的扩展名}}))//配置静态资源加载中间件app.use(koaStatic(path.join(“/f\upload”)//读取静态文件directory))//Postrouter.post('/login',async(ctx,next)=>{console.log('loginSuccess!')//ctx.request.body用于获取post参数ctx.body=ctx.request.body;})//koa-routerapp.use(upload())//路由app.use(route).use(router.post('/upload',upload));app.listen(3000)upload.js/*文件上传*/constfs=require('fs');constpath=require('path');constdateFormat=require('../utils/dateFormat.js')constupload={上传:'/上传',图像:'/图像/',文件:'/文件/',MAXFILESIZE:200*1024*1024,//上传文件大小}//创建文件目录constmkdirFile=(path)=>{letpathList=path.split('/');让fileDir=''pathList.forEach(i=>{if(i){fileDir+=('/'+i)if(!fs.existsSync(fileDir)){fs.mkdirSync(fileDir,err=>{LogFile.info('创建失败',err)return});}}})}//保存文件constsaveFile=(file,path)=>{returnnewPromise((resolve,reject)=>{letrender=fs.createReadStream(file);//创建一个写流letupStream=fs.createWriteStream(path);render.pipe(upStream);upStreamm.on('finish',()=>{resolve(path)});upStream.on('error',(err)=>{reject(err)});})}/***文件上传*ps生成的文件名称为SKD_date*文件路径按照年月分存放*/constuploadImg=asyncctx=>{vartime=Date.parse(newDate())letdate=dateFormat.dateFormat(time,'yyyyMMddhhmmss');letfile=ctx.request.files.file;letfileName='SKD_'+upload.UPLOAD+upload.IMAGE//上传保存目录letfileYear=date.substring(4,8)+'/'+date.substring(8,10);让tail=file.name=='blob'?'png':file.name.split('.').pop()letfilePath=path.join(fileName,fileYear,date+'.'+tail);//根据时间拼接文件名awaitmkdirFile(fileName+fileYear)//创建文件目录awaitsaveFile(file.path,filePath).then(su=>{letuplaod_img=su.substring(upload.UPLOAD.length,su.length)ctx.body={error_code:10000,error_message:'上传文件成功',realName:uplaod_img,}}).catch(err=>{ctx.body={error_code:20008,error_message:'上传文件失败!',}})}module.exports={uploadImg};ps:fs,路径npminstall,date工具类可以查看dateFormat.js图片访问地址:http://localhost:3000/image/2019/09/SDK_20190904153509.jpg项目地址https://github.com/shanyanwt/。..愿你保持独立思考,不卑微,不霸道,不懦弱,努力成长为自己喜欢的样子。我是一只孤独的狼...欢迎star