Alojando imágenes remotamente con Cloudinary

En nuestra web app de NodeJS y Express, podemos aojar las imágenes localmente, usando multer. Pero también podemos alojarlas remotamente en la nube, usando uno de los servicios como Cloudinary.

Para usarlo primero tenemos que instalarlo, junto con multer, si no lo tenemos:

npm i -S multer cloudinary

Para despues modificar el formulario donde estamos subiendo la imagen:

 <form class="" action="/pedidos" method="post" enctype="multipart/form-data">
...
 <input type="file" multiple="" class="inputFileHidden" name="foto">

Ahora, modificamos la ruta POST par agregar la configuracion:

var multer = require('multer');
var storage = multer.diskStorage({
  filename: function(req, file, callback) {
    callback(null, Date.now() + file.originalname);
  }
});
var imageFilter = function (req, file, cb) {
    // accept image files only
    if (!file.originalname.match(/\.(jpg|jpeg|png|gif)$/i)) {
        return cb(new Error('Only image files are allowed!'), false);
    }
    cb(null, true);
};
var upload = multer({ storage: storage, fileFilter: imageFilter})

var cloudinary = require('cloudinary');
cloudinary.config({ 
  cloud_name: 'learntocodeinfo', 
  api_key: process.env.CLOUDINARY_API_KEY, 
  api_secret: process.env.CLOUDINARY_API_SECRET
});

Ahora ya podemos usarla de esta forma:

router.post('/', objetoMiddleware.estaLogin, upload.single('foto'), (req, res) => {

cloudinary.uploader.upload(req.file.path, function(result) {
 User.findById(req.user, (err, user) => {
 if (err) {
 res.send(err)
 } else {
 Lugares.findById(req.body.lugar, (err, lugar) => {
 if (err) {
 res.send(err)
 } else {

var buffer = {};

buffer.lugar = req.body.lugar;
 buffer.user = req.body.user;
 buffer.fecha = req.body.fecha;
 buffer.contenido = req.body.contenido;
 buffer.precio = req.body.precio;

if (req.file == undefined) {
 buffer.foto = 'n/a';
 } else {
 buffer.foto = result.secure_url;
 }

Pedidos.create(buffer, (err, creado) => {

user.pedidos.push(creado);
 user.save();
 lugar.pedidos.push(creado);
 lugar.save();

if (err) {
 res.send(err);
 } else {
 res.redirect('/lugares/' + req.body.lugar);
 }
 })
 }
 })
 }
 })

});

})

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s