Created
April 26, 2019 20:49
-
-
Save ahrherrera/dc64e13da4c73b631392485bd860793e to your computer and use it in GitHub Desktop.
Picture upload
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const multer = require('multer'); | |
const picStorage = multer.diskStorage({ | |
destination: function (req, file, cb) { | |
cb(null, 'public/images'); // carpeta donde guardara los ficheros | |
}, | |
filename: function (req, file, cb) { | |
cb(null, Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15) + file.originalname); | |
//El nombre como quedara el archivo guardaro (Aca genero un string aleatorio para en caso que no se repitan los filenames) | |
} | |
}); | |
const picFilter = (req, file, cb) => { | |
// reject a file | |
if (file.mimetype === 'image/jpeg' || file.mimetype === 'image/png') { //Esto es para que solo acepte imagenes JPEG y PNG | |
cb(null, true); | |
} else { | |
cb(null, false); | |
} | |
}; | |
const Picupload = multer({ | |
storage: picStorage, //Set la configuracion de storage creada anteriormente | |
limits: { | |
fileSize: 1024 * 1024 * 5 //Deja un limite de subida por archivo | |
}, | |
fileFilter: picFilter //set el filtro de archivos creada anteriormente | |
}); | |
//En el router // | |
// El filekey o el nombre de la propiedad donde cargar los archivos en el POST es image -> Puedes cambiar el nombre en single('loquesea') | |
router.post("/upload", Picupload.single('image'), function (req, res, next) { | |
personModel | |
.upload(req) //es necesario enviar el req que contiene la informacion de la solicitud HTTP | |
.then( | |
function (response) { //success | |
console.log("Success!"); | |
res.send(response); //return the data | |
}, | |
function (error) { //failed | |
console.error("Failed!", error); | |
res.status(404).send(error); //return error with 404 | |
} | |
) | |
.catch(function (ex) { //exception | |
console.error("Exception!", ex); | |
res.status(500).send(ex); //return exception with 500 | |
}); | |
}); | |
//En el model // | |
exports.upload = function (req) { | |
return new Promise((resolve, reject) => { //return promise, callbacks are bad! | |
if (req.file) { | |
console.log(req.file); //req.file contiene la informacion de los archivos que se guardaron | |
return resolve({ response: "images/" + req.file.filename }); // esto es para que no envie images/filename.png | |
} else { | |
return reject({ response: "Error uploading" }) | |
} | |
}); | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment