использование анализатора тела busboy с multer для загрузки файлов в nodejs - PullRequest
0 голосов
/ 29 октября 2018

Я использую синтаксический анализатор busboy для анализа данных составной формы. Поэтому я получаю поля, такие как имя, значения ключей имени пользователя в req.body и файлы в req.files. Но я не могу загрузить файлы в каталог, используя multer.

app.use(busboyBodyParser());
app.post('/createUser', (req, res) => {

  console.log(req.body);
  console.log(req.files);
   const storage = multer.diskStorage({
     destination: './public/uploads/',
     filename: function (req, file, cb) {
       cb(null, file.fieldname + '-' + Date.now() + 
         path.extname(file.originalname));
     }
   });
   const upload = multer({
      storage: storage
   }).single(req.files['uploadpic']);
   upload(req, res, (err) => {
   });

});

1 Ответ

0 голосов
/ 02 ноября 2018

Вам не нужно использовать busboy с multer, поскольку он построен поверх него.

Ваши файлы не сохраняются, потому что ваши файлы поступают в виде массива, но вы пытаетесь прочитать его как отдельный файл также с неправильным синтаксисом.

upload.single('fieldName') //is the syntax for single file

Ваш код будет переписан так:

//removing busbodyparser

//declaring multer configs 

const storage = multer.diskStorage({
  destination: './public/uploads/',
  filename: function (req, file, cb) {
    cb(null, file.fieldname + '-' + Date.now() + 
      path.extname(file.originalname));
  }
});

const upload = multer({
   storage: storage
}).array('uploadpic', 8]

//make sure you define maxCount - here 8 is given as an example
//array will take in a number of files with the same 'uploadpic' field name

app.post('/createUser', (req, res) => {

    upload(req, res, function(err) {
        if (err) {
            //show error
        }

        //your files are saved and req.body and req.files are populated using multer

        console.log(req.files);
        console.log(req.body);
    });
});    
...