Skip to content

Instantly share code, notes, and snippets.

@ahrherrera
Created April 26, 2019 20:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ahrherrera/dc64e13da4c73b631392485bd860793e to your computer and use it in GitHub Desktop.
Save ahrherrera/dc64e13da4c73b631392485bd860793e to your computer and use it in GitHub Desktop.
Picture upload
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