mkdirpnpmimkdirp-S//1.0.4今天写和上传文件的时候,查看了同步创建的文件使用的是mkdirp包,但是发现大部分的网络用法都是错误的,因为mkdirp的版本升级了,用法被改变了。mkdirp=require('mkdirp');awaitmkdirp(dir)//错误用法之一constmkdirp=require('mkdirp');//错误用法二mkdirp('./tmp/foo/bar/baz',function(err){console.log(err);});正确的写法constmkdirp=require('mkdirp')//返回值是一个Promise,解析到创建的目录mkdirp('/tmp/foo/bar/baz').then(made=>console.log(made))constmkdirp=require('mkdirp')//返回目录同步constmade=mkdirp.sync('/tmp/foo/bar/baz')console.log(made)使用示例//上传图片asyncuploadImg(){const{ctx}=thisconstparts=ctx.multipart({autoFields:true})consturls=[]constdir=path.join(this.config.baseDir,'app/public/upload/image/',dayjs().format('YYYY-MM-DD'))awaitmkdirp.sync(dir)letstreamwhile((stream=awaitparts())!=null){constfileType=stream.mimeType.split('/')[1]常量文件名=dayjs().valueOf()+'.'+文件电子类型||stream.filename.toLowerCase()consttarget=path.join(dir,filename)urls.push(`/public/upload/image/${filename}`)constwriteStream=awaitfs.createWriteStream(target)等待泵(stream,writeStream)}returnurls[0]}//上传文件asyncuploadFile(){const{ctx}=thisconsturls=[]conststream=awaitctx.getFileStream()constdir=path.join(this.config.baseDir,'app/public/upload/file/',dayjs().format('YYYY-MM-DD'))awaitmkdirp.sync(dir)constfileType=stream.filename.toLowerCase().split('.')常量文件名=dayjs().valueOf()+'.'+fileType[fileType.length-1]//生成写入路径consttarget=path.join(dir,filename)constwriteStream=awaitfs.createWriteStream(target)//写入流stream.pipe(writeStream)//以管理方式写入流等待新的Promise((resolve,reject)=>{writeStream.on('finish',()=>{//监听写入完成事件urls.push(`/public/upload/file/${filename}`)resolve(stream.fields)})writeStream.on('error',async(err)=>{awaitsendToWormhole(stream)//关闭管道writeStream.destroy()//Destroyreject(err)})})returnurls[0]}在线代码GitHub代码调用此方法
