Ускорьте проверку файлов в NestJS: подробное руководство

В этой статье блога мы окунемся в захватывающий мир проверки файлов в NestJS. Мы рассмотрим различные методы и приемы проверки файлов, загруженных в ваше приложение NestJS. Независимо от того, создаете ли вы функцию загрузки файлов или работаете с аватарами пользователей, это руководство предоставит вам все необходимые инструменты для обеспечения целостности и безопасности ваших файлов.

Метод 1: промежуточное программное обеспечение Multer
Multer — это мощное промежуточное программное обеспечение для обработки загрузки файлов в Node.js. Чтобы использовать его с NestJS, вы можете установить пакет multerи настроить промежуточное программное обеспечение, которое будет обрабатывать загрузку и проверку файлов. Вот пример реализации проверки файлов с помощью Multer:

import { MulterOptions } from '@nestjs/platform-express';
import { diskStorage } from 'multer';
const multerOptions: MulterOptions = {
  storage: diskStorage({
    destination: (req, file, cb) => {
      // Define the destination directory
      cb(null, 'uploads/');
    },
    filename: (req, file, cb) => {
      // Generate a unique filename for the uploaded file
      const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1e9);
      cb(null, file.fieldname + '-' + uniqueSuffix);
    },
  }),
  fileFilter: (req, file, cb) => {
    // Perform file validation here
    if (file.mimetype !== 'image/jpeg' && file.mimetype !== 'image/png') {
      cb(new Error('Only JPEG and PNG files are allowed!'), false);
    } else {
      cb(null, true);
    }
  },
};
// Apply the multer middleware to a specific route or globally
app.use(multer(multerOptions).single('file'));

Метод 2: средство проверки классов
NestJS хорошо интегрируется с популярной библиотекой class-validator, позволяя определять правила проверки с помощью декораторов. Чтобы проверить свойства файла, такие как размер, тип и расширение, вы можете создать класс-валидатор класса и применить его к своему DTO (объекту передачи данных) или сущности. Вот пример:

import { IsNotEmpty, IsString, IsMimeType, MaxFileSize, MinFileSize, Matches } from 'class-validator';
class FileDTO {
  @IsNotEmpty()
  @IsString()
  @Matches(/\.(jpg|jpeg|png)$/, { message: 'Only JPG, JPEG, and PNG files are allowed!' })
  filename: string;
  @IsNotEmpty()
  @IsMimeType('image/jpeg', 'image/png', { message: 'Only JPEG and PNG files are allowed!' })
  file: any;
  @IsNotEmpty()
  @MinFileSize(1024, { message: 'File size must be at least 1KB!' })
  @MaxFileSize(5 * 1024 * 1024, { message: 'File size cannot exceed 5MB!' })
  fileSize: number;
}
// Apply the FileDTO validation class to your NestJS controller or service

Метод 3: манипулирование изображениями с помощью Sharp
Если вашему приложению требуется манипулирование изображениями наряду с проверкой файлов, библиотека sharpможет стать отличным выбором. Он предоставляет простой и эффективный API для изменения размера, обрезки и модификации изображений. Вот пример изменения размера загруженного изображения с помощью Sharp:

import sharp from 'sharp';
const resizeImage = async (inputPath: string, outputPath: string, width: number, height: number) => {
  await sharp(inputPath).resize(width, height).toFile(outputPath);
};
// Use the resizeImage function after validating the file

Проверка файлов в NestJS имеет решающее значение для обеспечения целостности данных и предотвращения уязвимостей безопасности. В этой статье мы рассмотрели три мощных метода: промежуточное программное обеспечение Multer для общей проверки файлов, средство проверки классов для определения правил проверки с использованием декораторов и Sharp для манипулирования изображениями. Используя эти методы, вы можете гарантировать, что файлы, загруженные в ваше приложение NestJS, безопасны, надежны и соответствуют указанным вами критериям.