2016-03-01 1 views
0

Je suis en train de télécharger une photo avec multer et express et tout va bien. Mais quand je veux créer un répertoire dynamiquement en utilisant la bibliothèque fs, j'ai besoin d'accéder à req.body.name dans la destination dans la fonction multer.diskStorage().télécharger l'image avec multer et exprimer

Est-ce possible?

Ceci est mon code:

var storage = multer.diskStorage({ 
    destination: function (req, file, callback) { 
     callback(null, './public/products'); 
    }, 
    filename: function (req, file, callback) { 
     if (file.mimetype === 'image/jpg') { 
      callback(null, file.fieldname + '-' + Date.now() + ".jpg"); 
     } 
     else if (file.mimetype === 'image/jpeg') { 
      callback(null, file.fieldname + '-' + Date.now() + ".jpeg"); 
     } 
     else if (file.mimetype === 'image/png') { 
      callback(null, file.fieldname + '-' + Date.now() + ".png"); 
     } 
     else if(file.mimetype !== 'image/jpg' || file.mimetype !== 'image/jpeg' || file.mimetype !== 'image/png'){ 
      return false; 
     } 
    } 
}); 

var Create_products = multer({ storage : storage , limits: {files:1 }}).single('PRODUCT_PHOTO'); 

Est-ce mal ou non?

+0

vous voulez avoir une possibilité dynamique basée sur des données où vos données doivent être stockées? –

+0

Oui, je veux créer des dossiers dynamiques ... et chaque dossier a des informations comme img ou vidéo ou .... –

Répondre

0

J'ai personnellement fait usage du module ngFileupload au frontend (Angulaire js) à partir de là j'envoie des données avec des fichiers et j'y accède par req.body.fieldname, j'utilise le module mkdirp à la place de fs, vous pouvez évidemment choisir tu veux. J'ai donné un échantillon de démonstration pour implémenter le tout. Faites-moi savoir si vous avez besoin d'éclaircissements. Bonne chance.

Route

app.post('/whatever', funcname.single('file'), thisiscalledafterupload, route.func); 

Fonction Upload

var funcdata = multer.diskStorage({ 
    destination: function (req, file, cb) { 

     var newfoldername = req.body.foldername; //here the folder name is passed along with the files - I have used angular (ngfileupload) 
     mkdirp(__dirname + 'somethingroot/folder/' + newfoldername, function (err) { 
      console.log(__dirname); 
      if (err) console.error(err) 
      cb(null, __dirname + 'somethingroot/folder/' + newfoldername); 
     }); 
    }, 
    filename: function (req, file, cb) { 

     var f = Date.now() + '_'; 
     cb(null, f + file.originalname) 
      //file saved now the thisiscalledafterupload will be called 
    } 
}) 
var funcname = multer({ 
    storage: funcdata 
});