From 9e0bbb40a85cd9834a9c204191d7a397645dee24 Mon Sep 17 00:00:00 2001 From: Damien <damien.armillon@gmail.com> Date: Sun, 28 Apr 2019 11:49:18 +0200 Subject: [PATCH] On peut transmettre le toucan en pdf et sa cover --- .gitignore | 1 + backend/.gitignore | 3 +- backend/routes/routesToucan.js | 18 +++++++++++- backend/utils/fileSaver.js | 54 ++++++++++++++++++++++++++++++++++ 4 files changed, 74 insertions(+), 2 deletions(-) create mode 100644 .gitignore create mode 100644 backend/utils/fileSaver.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..600d2d3 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.vscode \ No newline at end of file diff --git a/backend/.gitignore b/backend/.gitignore index 30bc162..cd1dfd8 100644 --- a/backend/.gitignore +++ b/backend/.gitignore @@ -1 +1,2 @@ -/node_modules \ No newline at end of file +/node_modules +.env.json \ No newline at end of file diff --git a/backend/routes/routesToucan.js b/backend/routes/routesToucan.js index 7d254e0..5d36390 100644 --- a/backend/routes/routesToucan.js +++ b/backend/routes/routesToucan.js @@ -1,4 +1,7 @@ var express = require("express"); +var fs = require("fs"); +var path = require("path"); +var upload = require("../utils/fileSaver"); var Toucan = require("../models/modelToucan"); var router = express.Router(); @@ -16,8 +19,21 @@ router.route("/toucans") }); }) // Une route pour créer un toucan - .post(function(req,res) { + .post(upload.fields([{name:"toucan", maxCount:1 }, {name:"cover", maxCount:1 }]),function(req,res) { var toucan = new Toucan(req.body); + var id = (toucan._id).toString(); + var index; + // On renome les fichier avec la clé de l'entrée dans la database + for (index in req.files) { + var file = req.files[index][0]; + var extension = path.extname(file.path); + var newPath = file.destination+"/"+id+extension; + fs.rename(file.path,newPath, err => { + if (err) { + res.err(err); + } + }); + } toucan.save(function(err) { if (err) { res.send(err); diff --git a/backend/utils/fileSaver.js b/backend/utils/fileSaver.js new file mode 100644 index 0000000..899edf3 --- /dev/null +++ b/backend/utils/fileSaver.js @@ -0,0 +1,54 @@ +var multer = require("multer"); +var env = require("../.env"); + +//Renvoie le nom de l'extension de file si son mime est autorisé, null sinon +var isAllowedMime = function(file) { + var mime = file.mimetype; + var ext = null; + env.savedExtensions.forEach(extension => { + var index = extension.knownMime.indexOf(mime); + if (index>=0) { + var theMime = extension.knownMime[index].split("/"); + ext = theMime[theMime.length-1]; + } + }); + return ext; +}; + + +// On ne sauvegarde que si on connait l'extension +var fileFilter = function(req,file,cb) { + var shouldPass= isAllowedMime(file); + cb(!shouldPass ? new Error("Extension inconnue"): null ,shouldPass); +}; + + +// On envoie dans le dossier de destination en fonction de l'extension +var saveDestination = function(req,file,cb) { + var mime = file.mimetype; + var hasPassed = false; + env.savedExtensions.forEach(extension => { + if (extension.knownMime.includes(mime)) { + hasPassed = true; + cb(null,extension.path); + } + }); + if (!hasPassed) { + cb(new Error("Impossible d'enregistrer le fichier")); + } +}; + +//Les toucans sont només par leur date de parution +var aFileNeedAName = function(req,file,cb) { + var extension = isAllowedMime(file); + cb(null,"defaultName."+extension); +}; + +var storage = multer.diskStorage({ + destination: saveDestination, + filename: aFileNeedAName, +}); + +var upload = multer({storage: storage, fileFilter: fileFilter}); + +module.exports = upload; \ No newline at end of file -- GitLab