Multer es un middleware de Node.js para manejar datos de varias multipart/form-data, que se usa principalmente para cargar archivos. Está escrito sobre busboy para una máxima eficiencia.
Crea un nuevo proyecto, según Express - Bases, Express - ORM (Básico), Express - ORM (Intermedio), Express - Parámetros de consulta y Parámetros de ruta, Express - REST y Express - Formularios I.
hito8-api
Agregue la ruta "public/images/"
donde se almacenarán las imágenes.
...
const Etiqueta = require('../models').etiqueta;
const path = "public/images/"
...
Agregue la referencia a los módulos multer, e instance la clase multer. Configure la función filename para asignar el nombre original del archivo.
...
const path = "public/images/"
const multer = require("multer");
const storage = multer.diskStorage(
{
destination: path,
filename: function ( req, file, cb ) {
cb( null, file.originalname);
}
}
);
const upload = multer({ storage: storage })
...
Modifique la ruta '/save'
del verbo POST
archivo
...
router.post('/save', upload.single('archivo'), function(req, res, next) {
...
...
router.post('/save', upload.single('archivo'), function(req, res, next) {
let {titulo, descripcion, calificacion,ruta} = req.body;
Foto.create({
titulo: titulo,
descripcion: descripcion,
calificacion: parseFloat(calificacion),
ruta: path+ruta,
createdAt: new Date(),
updatedAt: new Date()
})
.then(foto => {
res.json(foto);
})
.catch(error => res.status(400).send(error))
});
...
Crea un nuevo proyecto, según Express - Bases, Express - Bootstrap, Express - Layouts y Partials y Express - Formularios I.
hito5-admin
...
<form action="/photos/save" method="post" name="add" enctype="multipart/form-data">
...
var router = express.Router();
...
const multer = require('multer')
const FormData = require('form-data');
const upload = multer()
...
'/photos/save'
del verbo POST
route
...
router.post('/photos/save', upload.single('route'), async function(req, res, next) {
...
...
router.post('/photos/save', upload.single('route'), async function(req, res, next) {
let { title, description, rate } = req.body
let { buffer, originalname } = req.file
...
});
...
...
router.post('/photos/save', upload.single('route'), async function(req, res, next) {
let { title, description, rate } = req.body
let { buffer, originalname } = req.file
const URL = 'http://localhost:4444/rest/fotos/save'
let data = new FormData()
data.append("titulo", title)
data.append("descripcion", description)
data.append("calificacion", rate)
data.append("ruta", originalname)
data.append("archivo", buffer, originalname)
...
});
...
...
router.post('/photos/save', upload.single('route'), async function(req, res, next) {
let { title, description, rate } = req.body
let { buffer, originalname } = req.file
const URL = 'http://localhost:4444/rest/fotos/save'
const data = new FormData()
data.append("titulo", title)
data.append("descripcion", description)
data.append("calificacion", rate)
data.append("ruta", originalname)
data.append("archivo", buffer, originalname)
const config = {
headers: data.getHeaders(),
proxy: {
host: 'localhost',
port: 4444
}
}
const response = await axios.post(URL, data, config);
...
});
...
npm install
npm install multer
set PORT=4444
npm run devstart
npm install
npm install multer form-data
set PORT=3080
npm run devstart
"http://localhost:3080/photos/add"
"http://localhost:3080/photos"
, verifique que aparezcan los datos recientemente ingresados.