Multer: загружать файлы разных типов в разные папки - PullRequest
0 голосов
/ 01 июня 2018

У меня есть простая форма с двумя полями ввода файла.Один из них об изображении, а другой о mp3-файле.

У меня есть экспресс-сервер, который использует multer в качестве системы загрузки файлов.Я хотел бы сохранить изображение внутри img и файл mp3 внутри папки music.

Это то, что я пробовал до сих пор:

var musicUpload = multer({dest: 'music'});
var imgUpload = multer({dest: 'img'});

app.post('music', 
         musicUpload.single('music'), 
         imgUpload.single('img'), 
         function (req, res) {
             ...
         });

Пока этоэто форма:

<form action="post" enctype="multipart/form-data" action="music">
    <input type="file" id="img" name="img">
    <input type="file" id="music" name="music">
    <input type="submit" value="Send">
</form>

Мне нужно обрабатывать 2 разных файла по-разному, поэтому я дважды использовал «single».Но, к сожалению, я получаю сообщение об ошибке «Неожиданное поле».

Как можно добиться результата?

Ps.На SO много вопросов о загрузке нескольких файлов, но ни один из них не решил мою конкретную проблему.Не спешите отмечать этот вопрос :)

1 Ответ

0 голосов
/ 01 июня 2018

Вы можете попробовать использовать что-то вроде DiskStorage.Согласно их документам: https://github.com/expressjs/multer

var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    if (file.mimetype === 'audio/mp3') {
      cb(null, 'songs')
    } else if (file.mimetype === 'image/jpeg') {
      cb(null, 'img')
    } else {
      console.log(file.mimetype)
      cb({ error: 'Mime type not supported' })
    }
  }
})


var upload = multer({ storage: storage })

, а затем на самих конечных точках:

var upload = multer({storage}); 
  router.post('/song', upload.any(), function(req, res) { 
  ...  
});

это, вероятно, чище, чем ваш подход, и я думаю, что дает функциональность, которую выищите, поскольку это дает вам более детальный контроль над сохранением этих файлов.(с правками @cristian)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...