2016-03-01 3 views
0

Я пытаюсь загрузить фотографию с multer и выразить, и все в порядке. Но когда я хочу динамически создавать каталог с помощью библиотеки fs, мне нужен доступ к req.body.name в пункте назначения в функции multer.diskStorage().upload image with multer and express

Возможно ли это?

Это мой код:

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'); 

Это неправильно или нет?

+0

вы хотите иметь динамическую возможность, основываясь на данных, где должны быть сохранены ваши данные? –

+0

yeap Я хочу создать динамически папки ... и каждая папка имеет некоторую информацию, например img или видео или .... –

ответ

0

Я лично использовал модуль ngFileupload во внешнем интерфейсе (Angular js), откуда я отправляю данные вместе с файлами, и я получаю доступ к этому req.body.fieldname, я использую модуль mkdirp на месте fs, вы, очевидно, можете выбрать что угодно вы хотите.

У меня есть образец демо, чтобы реализовать все это.

Сообщите мне, если вам нужно какое-либо разъяснение. Удачи.

Маршрут

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

Загрузить Функция

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 
});