Estoy tratando de cargar imágenes usando Multer y aunque la carpeta de destino existe Multer me dice el error de que no puede encontrar la carpeta, este es mi código:
import { Router } from 'express'; import { check, validationResult } from 'express-validator'; const path = require('path'); const multer = require('multer') const storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, path.join(__dirname, '../uploads/')) }, filename: function (req, file, cb) { cb(null, new Date().toISOString() + file.originalname) } }); const fileFilter = (req, file, cb) => { if (file.mimetype === "image/png" || file.mimetype === "image/jpg" || file.mimetype === "image/jpeg") { cb(null, true); } else { cb(null, false); return cb(new Error('Only .png, .jpg and .jpeg format allowed!')); } }; const upload = multer( { storage: storage, limits:{ fileSize: 1024 * 1024 }, fileFilter: fileFilter }) let router = Router(); router.post('/', upload.single('img'), newProduct );Pero al hacer la prueba de Postman me dice el error:
Error: ENOENT: no existe tal archivo o directorio, abra 'C:\project\uploads\2022-02-11T03:17:32.711Zcloud.png'
Lo extraño es que la ruta de la carpeta existe:
Y mas raro es que si uso el codigo basico de multer sin usar multer.diskStorage si puedo guardar en la carpeta de esta forma:
const express = require('express') const multer = require('multer') const upload = multer({ dest: 'uploads/' })Realmente no sé por qué cuando se usa simplemente si muestra la ruta que existe pero Multer no puede encontrar el directorio aunque exista.
Gracias.
Cambié esta línea:
cb(null, new Date().toISOString() + file.originalname)Por esta línea:
cb(null, new Date().toISOString().replace(/:/g, '-') + file.originalname)Reemplazar los dos puntos con un guión significa que Windows no parece entender correctamente las rutas de los dos puntos.