Декоратор @IsDataURI() выполняет проверку строки на
соответствие формату Data URI, описанному в RFC 2397. Валидация основана
на механизмах библиотеки validator.js, интегрированной в
class-validator, и применяется к строковым значениям
свойств классов.
Data URI представляет собой способ встраивания небольших данных непосредственно в строку, обычно внутри HTML, CSS или JSON. Общая структура формата:
data:[<mediatype>][;base64],<data>
где:
data: — обязательный префикс схемы;<mediatype> — MIME-тип содержимого (например,
image/png, text/plain);;base64 — признак кодирования в base64
(опционально);<data> — непосредственно закодированное или
URL-encoded содержимое.Декоратор применяется к свойствам классов DTO:
import { IsDataURI } from 'class-validator';
class FileDto {
@IsDataURI()
file: string;
}
Валидация допускает только строки, полностью соответствующие формату Data URI. Любое отклонение от синтаксиса приводит к ошибке валидации.
Внутри class-validator используется функция
isDataURI из validator.js. Проверка включает
несколько этапов:
Проверка префикса data:
Разбор MIME-типа (если указан)
Определение наличия ;base64
Валидация части данных:
base64Проверка корректности разделителя ,
Строка считается валидной только при успешном прохождении всех этапов.
data:,Hello%20World
Используется минимальная форма, где тип данных не задан явно.
data:text/plain,Hello%20World
В этом случае явно указан тип содержимого.
data:image/png;base64,iVBORw0KGgoAAAANSUhEUg...
Чаще всего используется для изображений и бинарных данных.
@IsDataURI() поддерживает передачу параметров,
расширяющих поведение проверки. Основной опцией является настройка
проверки MIME-типа:
@IsDataURI({ message: 'Некорректный Data URI' })
file: string;
Опция message позволяет задать кастомный текст
ошибки:
@IsDataURI({ message: 'Значение должно быть Data URI' })
file: string;
В некоторых конфигурациях валидатор может ограничивать допустимые медиа-типы. Это важно при работе с файлами, где требуется строгий контроль формата (например, только изображения).
Пример логической модели:
image/png, image/jpegtext/html,
application/javascriptФактическая реализация зависит от переданных параметров и поведения
validator.js.
Часто @IsDataURI() применяется в связке с другими
декораторами:
import { IsString, IsNotEmpty, IsDataURI } from 'class-validator';
class AvatarDto {
@IsString()
@IsNotEmpty()
@IsDataURI()
avatar: string;
}
Такой подход обеспечивает одновременно проверку типа, наличия значения и формата Data URI.
Data URI позволяет передавать изображения без отдельной загрузки файлов:
{
"avatar": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQ..."
}
В REST API Data URI используется как альтернатива multipart/form-data при небольших объемах данных.
Некоторые системы используют Data URI для хранения и передачи иконок, шаблонов или миниатюр.
data:image/png;base64,AAAA
Такое значение не считается Data URI.
data:image/png;base64AAAA
Отсутствие , нарушает структуру формата.
data:image/png;base64,%%%INVALID%%%
Содержимое не декодируется как base64, что приводит к ошибке.
data:image/png;base64, AAAA
Пробелы внутри данных могут приводить к отклонению строки валидатором.
При отсутствии ;base64 данные должны быть корректно
URL-encoded:
data:text/plain,Привет%20мир
Неправильная кодировка кириллических символов часто становится причиной ошибки валидации.
@IsDataURI() редко используется изолированно. Типичная
композиция:
class UploadDto {
@IsOptional()
@IsString()
@IsDataURI()
preview: string;
}
Также возможно применение вместе с @Matches() для
дополнительной фильтрации MIME-типа.
Валидация зависит от дополнительных декораторов:
undefined игнорируется без
@IsNotEmpty()null требует явной обработки через
@IsOptional() или пользовательские правилаПроверка Data URI включает:
На практике нагрузка минимальна, но при массовой валидации больших payload-ов с изображениями base64 может становиться значительным фактором затрат памяти и CPU.
При использовании валидационного пайпа:
app.useGlobalPipes(new ValidationPipe());
@IsDataURI() автоматически участвует в проверке входящих
DTO до попадания данных в бизнес-логику, блокируя некорректные значения
на уровне транспортного слоя.
@IsBase64() — проверяет только base64-строку без схемы
data:@IsUrl() — проверяет URL, не содержащий встроенные
данные@Matches() — позволяет задать собственное регулярное
выражение, но без семантической проверки Data URI@IsDataURI() выполняет именно структурную проверку
стандарта, а не только синтаксическое совпадение.
Data URI удобен для небольших вложений, однако имеет ограничения:
Валидация через @IsDataURI() обеспечивает лишь
корректность формата, но не ограничивает размер или тип содержимого без
дополнительных декораторов.