【问题标题】:I can´t create automatic folders with Mkdir from Server我无法使用来自服务器的 Mkdir 创建自动文件夹
【发布时间】:2022-01-01 16:48:45
【问题描述】:

我创建了一个应用程序,它为每组上传的图像创建一个文件夹。在本地主机上运行我的应用程序时我没有任何问题,但是当我上传我的页面并尝试上传图片组时,页面显示:

{"errno":-2,"code":"ENOENT","syscall":"mkdir","path":"src/public/img/ministerios/prueba"}

我不允许从服务器创建新的自动文件夹。

router.post('/images/ministerios',async(req,res)=>{
    try{
        const { titulo, info } = req.body;
        const ext = path.extname(req.files.image[0].originalname).toLocaleLowerCase();
        const imageDire = req.files.image[0].path; //direcion actual de la imagen
        let {filename} = req.files.image[0];
        filename = `${filename}${ext}`; //imagen con extension
        let errors = [];
        let obras = req.files.obras;
        const pathFolder = `src/public/img/ministerios/${titulo}`; // direcion carpeta a mover
        const targetPath = path.resolve(`src/public/img/ministerios/${titulo}/${filename}`); // direcion donde estara la imagen
        const viewImg = `/img/ministerios/${titulo}/${filename}`; // direcion para buscar imagen en la vista

        const espacios = titulo.replace(/\s/g,'-');
        ///clases para carousel
        const claseTarget = `glider-info-${espacios}`;
        const claseDots = `dots-info-${espacios}`;
        const clasePrev = `glider-prev-info-${espacios}`;
        const claseNext = `glider-next-info-${espacios}`;

        if(ext === '.png' || ext === '.jpg' || ext === '.gif' || ext === '.jpeg'){
                if(!fs.existsSync(pathFolder)){
                    await fs.mkdir(pathFolder);
                    await fs.rename(imageDire,targetPath);
                    const obrasFolder = `src/public/img/ministerios/${titulo}/obras`;
                    await fs.mkdir(obrasFolder);
                    obras.forEach(async(obra)=>{
                        let extObra = path.extname(obra.originalname).toLocaleLowerCase();
                        let filenameObra = obra.filename;
                        filenameObra =  `${filenameObra}${extObra}`;
                        let targetPathObras = path.resolve(`src/public/img/ministerios/${titulo}/obras/${filenameObra}`);
                        obra.direView = `/img/ministerios/${titulo}/obras/${filenameObra}`;
                        await fs.rename(obra.path,targetPathObras);
                    })
                    const newMinisterio = await new Ministerio
                    ({ titulo, info, filename: viewImg, carpeta: pathFolder, dire: targetPath, obras,
                        claseTarget,claseDots,clasePrev,claseNext }); 
                    const ministerioSaved = await newMinisterio.save();
                    req.flash('success_msg','Ministerio creado correctamente');
                    res.redirect('/');
                }else{
                    await fs.unlink(imageDire);
                    obras.forEach(async(obra)=>{
                        await fs.unlink(obra.path);
                    })
                    req.flash('error_msg','Ya hay otro ministerio con este nombre');
                    res.redirect('/');
                } 

            }else{
                req.flash('error_msg','Este formato de imagén no esta permitido');
                res.redirect('/');
            }

    }catch(e){
        res.send(e);
    }

});

【问题讨论】:

    标签: node.js express server mkdir


    【解决方案1】:

    我试了一下,效果不错;

    之前:

    await fs.mkdir(pathFolder)
    

    之后:

    await fs.mkdir(pathFolder,{recursive: true});
    

    【讨论】:

      猜你喜欢
      • 2010-11-22
      • 2016-08-14
      • 1970-01-01
      • 1970-01-01
      • 2022-12-03
      • 2014-11-30
      • 2020-09-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多