Загрузка массива изображений с подписями с помощью Express - PullRequest
0 голосов
/ 30 октября 2018

У меня есть форма на клиенте, которая позволяет пользователю добавлять несколько изображений в список, и каждое изображение имеет текстовый ввод для подписи.

Когда пользователь отправляет форму, я пытаюсь принять массив файлов и подписи одним экспресс-маршрутом. Я заполняю FormData на клиенте и отправляю POST-запрос на сервер.

const data = new FormData();
//imageFiles is an array populated with multipart/form files
imageFiles.forEach(imageFile => data.append('uploads', imageFile));
//append the caption data
imageFileCaptions.forEach(caption => data.append('captions[]', caption));

Я отправляю данные формы на сервер с помощью axios.

axios.post(`/api/item/update`, data)

Вот экспресс-маршрут:

router.post('/update', upload.array('uploads'), processAttachments, async (req, res) => {
  const item = req.body;
  const result = await service.update(item, req.attachments, req.user);
  ...
});

Для загрузки промежуточного программного обеспечения я использую multer и multer-s3. Все это работает нормально, я получаю массив req.files с загруженными файлами в следующей функции промежуточного программного обеспечения.

const upload = multer({
  storage: multerS3({
    s3,
    bucket: process.env.STORAGE_BUCKET,
    key: (req, file, cb) => {
      cb(null, Date.now().toString())
    }
  })
});

Проблема в том, что я не могу получить корректный вывод массива captions. req.body выглядит так:

{"captions[]":"myvalue"}

Я пытался добавить body-parser промежуточное ПО до processAttachments, но это тоже не сработало.

Кажется, что Multer обрабатывает массив файлов без проблем, но как я могу заставить сервер анализировать FormData для заголовков?

...