Валидационный декоратор @IsBase64 используется для
проверки строковых значений на соответствие формату Base64. Проверка
выполняется в рамках механизма валидации, предоставляемого библиотекой
class-validator, где декораторы применяются к полям DTO и других моделей
данных.
Base64 представляет собой способ кодирования бинарных данных в
текстовый формат с использованием набора из 64 символов: латинские
буквы, цифры, а также символы +, / и
= для выравнивания. Валидация подобного формата критична
при обработке файлов, изображений, токенов и иных структурированных
бинарных данных, передаваемых в виде строк.
Декоратор применяется непосредственно к свойству класса:
import { IsBase64 } from 'class-validator';
class FileDto {
@IsBase64()
content: string;
}
В этом случае значение content должно быть корректной
Base64-строкой. Любое отклонение от формата приводит к ошибке
валидации.
Проверка выполняется на уровне регулярного выражения и логики соответствия Base64-алфавиту. Валидация включает следующие аспекты:
=);Особенность реализации заключается в том, что проверка не декодирует строку, а анализирует её структуру.
Декоратор поддерживает опции, влияющие на режим проверки:
@IsBase64({ urlSafe: true })
data: string;
urlSafeurlSafe: false (по умолчанию) — стандартный
Base64:
+ и /urlSafe: true — URL-safe Base64:
- и _URL-safe вариант применяется в сценариях передачи данных через query string, REST API и токены. Отличие заключается в замене символов:
| Стандартный Base64 | URL-safe Base64 |
|---|---|
+ |
- |
/ |
_ |
Padding (=) может отсутствовать в зависимости от
реализации источника данных.
При несоответствии формату формируется объект ошибки валидации:
{
"property": "content",
"constraints": {
"isBase64": "content must be a base64 string"
}
}
Сообщение может быть переопределено через механизмы интернационализации или кастомизации сообщений валидации.
В типичных архитектурах (например, при использовании NestJS) проверка выполняется до попадания данных в бизнес-логику. Процесс включает:
import { IsBase64 } from 'class-validator';
export class UploadImageDto {
@IsBase64({ urlSafe: true })
image: string;
}
Base64 часто используется для передачи изображений и документов:
class ImageDto {
@IsBase64()
file: string;
}
Некоторые типы токенов кодируются Base64 для безопасной передачи через HTTP.
Base64 увеличивает объём данных примерно на 33%, что критично при больших файлах.
Декоратор не анализирует содержимое после декодирования. Валидность файла как изображения или бинарного объекта не проверяется.
Некоторые генераторы Base64 исключают символ =, что
может требовать использования URL-safe режима.
Вместо @IsBase64 иногда применяются:
@Matches(/^[A-Za-z0-9+/]+={0,2}$/)
data: string;
Минус: отсутствие поддержки URL-safe варианта без дополнительной логики.
Позволяют учитывать специфические требования к кодированию и источнику данных.
При использовании class-transformer данные могут предварительно приводиться к строковому виду:
import { Transform } from 'class-transformer';
import { IsBase64 } from 'class-validator';
class PayloadDto {
@Transform(({ value }) => value?.trim())
@IsBase64()
data: string;
}
Трансформация выполняется до валидации, что влияет на итоговый результат проверки.
В системах с жёсткой валидацией входных данных @IsBase64
часто комбинируется с другими декораторами:
import { IsString, IsNotEmpty, IsBase64 } from 'class-validator';
class DocumentDto {
@IsString()
@IsNotEmpty()
@IsBase64()
payload: string;
}
Порядок выполнения проверок может влиять на итоговое сообщение об ошибке, особенно при сложных схемах DTO.
Проверка Base64 является относительно дешёвой операцией, так как не включает декодирование. Однако при массовой обработке больших payload стоит учитывать:
Валидация Base64 часто используется в следующих архитектурных слоях:
Комбинация с другими декораторами позволяет формировать строгие контракты данных без необходимости ручной проверки формата.