Algo que vamos a hacer muy seguido es subir imagen con nodejs, y no solo imágenes sino archivos de varios tipos.
Teniendo en mente el post anterior, vamos a agregar una nueva llamada del tipo post que va a cargar una imagen.
Preparación para subir imagen con nodejs
Vamos a descargar una librería para hacer más fácil su uso.
npm install multer --save
Con multer lo que vamos a hacer es gestionar de manera muy sencilla la forma como recibimos un file en el request http, generando cabeceras fácil de entender.
que tenemos que hacer, vamos a configurar nuestro postman
Creamos nuestra llamada post pero seleccionamos la opción form-data, el nombre de nuestro formulario/input se llama por ejemplo attachment.
En este post explico como crear un formulario de tipo multipart. Igual podemos hacer esto para probar nuestro ws para cargar imagen.
Código para subida de archivos:
const multer = require('multer')({ dest: 'public/files' }) const fs = require('fs') const path = require('path') router.post('/uploadimg', [multer.single('attachment')], (req, res, next) => { console.log(req.file) if (req.file.length == 0) { responseb.error = true; responseb.mensaje = 'Ingrese una imagen'; responseb.codigo = 400; res.status(400).send(responseb); } else { if (req.file.mimetype.indexOf('image') >= 0) { let { fileName } = storeWithOriginalName(req.file) responseb.error = true; responseb.mensaje = fileName; responseb.codigo = 200; res.status(200).send(responseb); } else { responseb.error = true; responseb.mensaje = 'Ingrese una imagen'; responseb.codigo = 400; res.status(400).send(responseb); } } });
Vamos a explicar que es cada cosa
const multer = require(‘multer’)({
dest: ‘public/files’
})
Esta función es la llamada inicial, y especificamos cual es la carpeta de destino, recomiendo crearla ya que si no existe nos mandara un error.
router.post(‘/uploadimg’, [multer.single(‘attachment’)], (req, res, next) => {
abrimos con nuestro tipo de llamada (post), nuestra ruta (/uploadinimg), enseguida va nuestra mágica función ([multer.single(‘attachment’)]) donde recoge el nombre de nuestro input.
if (req.file.length == 0) {
responseb.error = true;
responseb.mensaje = ‘Ingrese una imagen’;
responseb.codigo = 400;
res.status(400).send(responseb);}
todos nuestros archivos iran a file, este lo crea y podemos leer de una manera sencilla gracias a multer .
else {
if (req.file.mimetype.indexOf(‘image’) >= 0) {
let { fileName } = storeWithOriginalName(req.file)
responseb.error = true;
responseb.mensaje = fileName;
responseb.codigo = 200;
res.status(400).send(responseb);}
una de las ventajas de file, es que tenemos un objeto muy completo donde nos trae toda la información del archivo que subimos, por ejemplo yo busco que sí es una imagen (image/png, image/jpg etc etc), guarde la información y nos conteste .
Como podemos ver cada vez que hacemos un post guarda el archivo en files de manera muy sencilla sin tanto código.
[…] Subir imagen […]