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