Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

257
Vistas
Estoy tratando de cargar archivos con multer en el backend de node.js y reaccionar js en el frontend, pero no funciona en la parte posterior con multer en la carpeta pública

La interfaz con React.js se ve bien. Vi a otras personas que hicieron lo mismo que yo, ¡pero no sé dónde está el problema! alguien puede ayudarme ?

 const [cours, setCours] = useState([]); const [description, setDescription] = useState("") const [title, setTitle] = useState("") const coursHandle = (e) => { setCours([e.target.files]) } const onsubmit = async (e) => { e.preventDefault(); const formData = new FormData(); formData.append("description", description); formData.append("title", title); // cours.forEach((elem) => { formData.append("cours", elem) }); formData.append("cours", cours) // for (let i = 0; i < cours.length; i++) { // formData.append("cours", cours[i]) // } await axios.post("http://localhost:5000/upload", formData) .then((res) => console.log("successfully file post", res)).catch((err) => console.log("error with file post", err)) }

y el backend con multer está aquí. Este código está en mi app.js app.use(express.static(path.join(__dirname, 'public'))); y la carpeta pública está en el mismo lugar que app.js

 const multer = require("multer"); const path = require("path"); const MIME_TYPES = { "file/pdf": "pdf", "file/docx": "docx", "file/txt": "txt", "file/png": "png", "file/jpeg": "jpg", "file/jpg": "jpg", } const fileStorage = multer.diskStorage({ destination: (req, file, cb) => { cb(null, "public"); }, filename: (req, file, cb) => { const nameObject = path.parse(file.originalname); // const nameObject = file.originalname.split(' ').join('_'); const extension = MIME_TYPES[file.mimetype]; cb(null, nameObject.name.split(" ").join("_") + Date.now() + "." + extension); } }) module.exports = { multerUpload: multer({ storage: fileStorage }).single("file") }
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Encontré la respuesta a mi pregunta,

 formData.append("cours", cours)

Aquí, el nombre clave que intento enviar es "cours" y:

 module.exports = { multerUpload: multer({ storage: fileStorage }).single("file")

¡Aquí el nombre clave para una sola función es "archivo"! ese fue un primer problema y otro fue este:

¡Olvidé agregar esta línea en mi etiqueta!

 encType="multipart/form-data"

Y finalmente mi multer js es:

 const fileStorage = multer.diskStorage({ destination: (req, file, cb) => { cb(null, "public/files"); }, filename: (req, file, cb) => { console.log("filename :", file); const nameObject = path.parse(file.originalname); cb(null, nameObject.name.split(" ").join("_") + Date.now() + nameObject.ext); } }) module.exports = { multerUpload: multer({ storage: fileStorage }).array("cours") }
about 4 years ago · Juan Pablo Isaza Denunciar

0

en ultima linea

 module.exports = { multerUpload: multer({ storage: fileStorage }).single("file")

el argumento bajo single es file , pero en su formulario de interfaz no hay entrada con nombre de archivo, tal vez tenga que cambiar el argumento de la función single de file a cours

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda