关于require('mkdirp')创建文件夹

简介: 关于require('mkdirp')创建文件夹

mkdirp



npm i mkdirp -S // 1.0.4


今天在写上传文件时候,查看同步创建文件如是使用了mkdirp包,不过发现网络有大部分错误用法,原因是mkdirp的版本升级了更改了用法

网络错误用法


const mkdirp = require('mkdirp');
await mkdirp(dir) //错误用法一
const mkdirp = require('mkdirp');
//错误用法二
mkdirp('./tmp/foo/bar/baz', function (err) {
  console.log(err); 
});


正确写法


const mkdirp = require('mkdirp')
// 返回值是一个Promise,解析为创建的一个目录  
mkdirp('/tmp/foo/bar/baz').then(made =>
  console.log(made)
)
const mkdirp = require('mkdirp')
// 返回目录 同步写法
const made = mkdirp.sync('/tmp/foo/bar/baz')
console.log(made)


使用实例


// 上传图片
async uploadImg() {
        const { ctx } = this
        const parts = ctx.multipart({ autoFields: true })
        const urls = []
        const dir = path.join(this.config.baseDir, 'app/public/upload/image/', dayjs().format('YYYY-MM-DD'))
        await mkdirp.sync(dir)
        let stream
        while ((stream = await parts()) != null) {
            const fileType = stream.mimeType.split('/')[1]
            const filename = dayjs().valueOf() + '.' + fileType || stream.filename.toLowerCase()
            const target = path.join(dir, filename)
            urls.push(`/public/upload/image/${filename}`)
            const writeStream = await fs.createWriteStream(target)
            await pump(stream, writeStream)
        }
        return urls[0]
    }
// 上传文件
    async uploadFile() {
        const { ctx } = this
        const urls = []
        const stream = await ctx.getFileStream()
        const dir = path.join(this.config.baseDir, 'app/public/upload/file/', dayjs().format('YYYY-MM-DD'))
        await mkdirp.sync(dir)
        const fileType = stream.filename.toLowerCase().split('.')
        const filename = dayjs().valueOf() + '.' + fileType[fileType.length - 1]
        // 生成写入路径
        const target = path.join(dir, filename)
        const writeStream = await fs.createWriteStream(target) // 写入流
        stream.pipe(writeStream) // 以管道方式写入流
        await new Promise((resolve, reject) => {
            writeStream.on('finish', () => {
                // 监听写入完成事件
                urls.push(`/public/upload/file/${filename}`)
                resolve(stream.fields)
            })
            writeStream.on('error', async (err) => {
                await sendToWormhole(stream) // 关闭管道
                writeStream.destroy() // 销毁
                reject(err)
            })
        })
        return urls[0]
    }


在线代码


GitHub代码


调用该方法


image.png

相关文章
|
2月前
|
JavaScript 前端开发
require
【10月更文挑战第24天】
32 5
|
JavaScript 前端开发 API
vite.config.js 无法使用__dirname的解决方法
在使用 vite 的时候发现,在其 vite.config 文件中无法使用 __dirname 来代表当前目录,所有经过一番了解之后有了这篇文章。
744 0
Nuxt.js 自定义文件夹指向(没有 assets 文件夹需手动添加)
Nuxt.js 自定义文件夹指向(没有 assets 文件夹需手动添加)
169 0
|
资源调度 JavaScript
nuxt3目录及使用
# nuxt3 Nuxt 3 是一个开源框架,可以自动整合了很多东西,另外,nuxt3还是Vue3的同构ssr渲染的使用方案。csr,ssr,srg三种渲染方案三种渲染模式可以参考我的[都2023年了,还在用传统的前后端分离?来学习一下CSR,SSR与SRG吧!!! - 掘金 (juejin.cn)](https://juejin.cn/post/7195551013033164855 "https://juejin.cn/post/7195551013033164855")这篇文章。 今天我们来具体使用一下Nuxt,来体验一下这非常神奇的Nuxt开发。 # 初始化项目 我们的host
|
PHP
Composer创建项目时报错:chdir(): No such file or directory (errno 2)
Composer创建项目时报错:chdir(): No such file or directory (errno 2)
218 0
|
JavaScript 开发者
_dirname 和_filename 获取正在执行的 js 文件的路径|学习笔记
快速学习_dirname 和 _filename 获取正在执行的 js 文件的路径
_dirname 和_filename 获取正在执行的 js 文件的路径|学习笔记
|
Python
pip安装报错:No such file or directory ; 没有那个文件或目录
pip安装报错:No such file or directory ; 没有那个文件或目录
1087 2
|
JavaScript 前端开发 vr&ar
通过fs模块创建文件夹|学习笔记
快速学习通过fs模块创建文件夹
more-copy.js指定文件模板生成到指定的文件目录下
more-copy.js指定文件模板生成到指定的文件目录下
120 0