Как получить файл из request в Next.js 13?

В Next.js 13, при использовании TypeScript, для получения файла из запроса можно воспользоваться следующими шагами:

1. Установите необходимые пакеты, включая next, multer, formidable, если они еще не установлены, с помощью команды:

npm install next multer formidable

2. Создайте файл api/upload.ts в директории pages/api с кодом для загрузки файла из запроса:

import { NextApiRequest, NextApiResponse } from 'next';
import multer from 'multer';

const upload = multer({ dest: 'uploads/' }).single('file');

export default function handler(req: NextApiRequest, res: NextApiResponse) {
  if (req.method === 'POST') {
    upload(req, res, (err: any) => {
      if (err instanceof multer.MulterError) {
        // Обработка ошибок Multer
        console.error(err);
        res.status(400).json({ message: 'Ошибка загрузки файла' });
      } else if (err) {
        // Обработка других ошибок
        console.error(err);
        res.status(500).json({ message: 'Ошибка сервера' });
      } else {
        // Если загрузка прошла успешно
        console.log(req.file);
        res.status(200).json({ message: 'Файл загружен' });
      }
    });
  } else {
    // Если метод запроса не POST
    res.status(405).json({ message: 'Метод не разрешен' });
  }
}

3. Запустите Next.js сервер с помощью команды:

npm run dev

4. Теперь вы можете отправлять POST-запросы на /api/upload с помощью обычной формы, содержащей поле для загрузки файла с именем "file". При успешной загрузке файла, он будет сохранен в папке "uploads" и будет выведено сообщение "Файл загружен" в формате JSON.

Заметьте, что в коде выше используется пакет multer для обработки загрузки файла, а пакет formidable встроен в Next.js и позволяет обрабатывать мультипарт запросы. Если вам требуются дополнительные настройки или обработка запроса, вы можете изменить код соответственно вашим потребностям.