diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..600d2d33badf45cc068e01d2e3c837e11c417bc4
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+.vscode
\ No newline at end of file
diff --git a/backend/.gitignore b/backend/.gitignore
index 30bc1627986aa5d1e6aebc1718de71eaee6021c5..cd1dfd84f1cb97cf8a89dda507f66ba7e29ff705 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 7d254e078833f35b1d646e84aa89cb935a7495de..5d363909275b2b48fe746fd84c807cadf10483ce 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 0000000000000000000000000000000000000000..899edf363dafc7099723f1fedb1b2d85ce9dcdfa
--- /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