Поиск по сайту
Ctrl + K
Вопросы по Nest.js

Как обрабатывать загрузку файлов в NestJS и какую роль играет библиотека Multer?

В NestJS для обработки загрузки файлов часто используется библиотека Multer. Она обеспечивает middleware для обработки multipart/form-data, который часто используется для загрузки файлов. Multer сохраняет загружаемые файлы на сервере или в памяти и предоставляет удобный интерфейс для доступа к этим файлам в последующем.

Установка зависимостей

Для использования Multer в проекте на NestJS, вам нужно установить необходимые зависимости. Обычно это делается с помощью npm или yarn:

npm install --save @nestjs/platform-express multer

или

yarn add @nestjs/platform-express multer

Настройка вашего контроллера

Далее необходимо создать контроллер, который обработает загрузку файлов. Вот пример, как это можно сделать:

import {Controller, Post, UseInterceptors, UploadedFile} from '@nestjs/common';
import {FileInterceptor} from '@nestjs/platform-express';

@Controller('files')
export class FilesController {

    @Post('upload')
    @UseInterceptors(FileInterceptor('file'))
    uploadFile(@UploadedFile() file: Express.Multer.File) {
        console.log(file); // В логе вы можете увидеть информацию о загруженном файле
        return {
            originalName: file.originalname,
            filename: file.filename,
        };
    }
}

Настройка Multer

Вы можете настроить Multer через объект конфигурации, если вам нужно использовать дополнительные параметры, такие как путь хранения файлов или лимиты на размер загружаемых файлов. Вот пример настройки:

import { Controller, Post, UseInterceptors, UploadedFile } from '@nestjs/common';
import { FileInterceptor } from '@nestjs/platform-express';
import { diskStorage } from 'multer';
import { v4 as uuidv4 } from 'uuid';
import { extname } from 'path';

@Controller('files')
export class FilesController {
  
  @Post('upload')
  @UseInterceptors(FileInterceptor('file', {
    storage: diskStorage({
      destination: './uploads', // Папка, куда будут сохраняться файлы
      filename: (req, file, cb) => {
        const uniqueSuffix = uuidv4(); // Генерация уникального имени файла
        const ext = extname(file.originalname); // Получение расширения
        cb(null, `${uniqueSuffix}${ext}`); // Определение имени файла
      }
    }),
    limits: { fileSize: 5 * 1024 * 1024 }, // Ограничение размера файла до 5MB
  }))
  uploadFile(@UploadedFile() file: Express.Multer.File) {
    return {
      originalName: file.originalname,
      filename: file.filename,
    };
  }
}

Запуск приложения

Чтобы протестировать загрузку файлов, вам нужно запустить ваше приложение NestJS и использовать инструмент для тестирования API, например Postman. Вам нужно отправить POST запрос на http://localhost:3000/files/upload, добавив файл в параметре file.

Заключение

Используя Multer в NestJS, вы можете легко обрабатывать загрузку файлов. Множество возможностей конфигурации дает вам гибкость для настройки поведения загрузки в зависимости от требований вашего приложения. Это делает NestJS мощным инструментом для разработки веб-приложений, которые требуют обработки файлов.