Как обрабатывать загрузку файлов в 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 мощным инструментом для разработки веб-приложений, которые требуют обработки файлов.