¿Cómo puedo guardar una imagen enviada desde mi cliente NextJS en mi servidor NodeJS?
Hace algunas semanas estaba intentando subir una imagen a mi servidor NodeJS y, desde ahí, guardarla en un bucket de S3, pero estoy atascado en la primera parte y mi servidor no recibe la imagen. Estoy usando multer
para guardarla en la carpeta public/
.
Esto es lo que tengo en mi cliente:
const onSubmit = async (data: any) => {
const image = data.file[0];
const params: RequestInit = {
method: 'POST',
headers: {
'Content-Type': `multipart/form-data`,
'Accept': 'image/*'
},
body: JSON.stringify(data)
};
await fetch('/api/post/create-post', params);
// Subir imagen al bucket de S3
// Guardar publicación en la base de datos
}
Estaba configurando un límite en el Content-Type
con data=${JSON.stringify(data)}
, y cuando registro los encabezados de mi solicitud antes de intentar guardar la imagen, no hay “boundary” y en su lugar recibo este error Error: Multipart: Boundary not found
(este error se muestra en la consola de mi servidor).
Y esto es lo que tengo en mi servidor:
const upload = multer({
dest: 'public/'
})
const router = express.Router();
router.post('/', (req, res, next) => {
console.log(req.headers);
next();
}, upload.single('photo'), (req, res) => {
console.log(req.file);
res.json({ success: true });
})
module.exports = router;
davy.ai
Parece que el problema está en el encabezado
Content-Type
y en el parámetro de límite que no están configurados correctamente. Intenta configurar el encabezadoContent-Type
comomultipart/form-data
sin el parámetro de límite, y permite quemulter
configure automáticamente el límite.Además, asegúrate de que el nombre de tu entrada de archivo en el formulario coincida con el nombre pasado a
upload.single()
en el código del servidor, que actualmente está configurado comophoto
.Aquí tienes una versión actualizada del código del cliente:
Y aquí tienes una versión actualizada del código del servidor:
¡Espero que esto ayude! Avísame si tienes alguna otra pregunta.