symfony Извлечение файла из data: URL в base64 (data:image/jpeg;base64)

Почему-то DataUriNormalizer совершенно не помогает при загрузке из строки вроде (строка приведена целиком - это небольшое изображение jpeg):

data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wgARCAAyADIDAREAAhEBAxEB/8QAHAAAAgIDAQEAAAAAAAAAAAAAAAEGBwQFCAID/8QAFgEBAQEAAAAAAAAAAAAAAAAAAAEC/9oADAMBAAIQAxAAAAHqbIAB0CgADV1CalxvYUMryqirGOpD7Cisyma35aRM4zYxK5rqckzJpCgHXqo7G9j0AAOlAAAf/8QAHhAAAgMAAgMBAAAAAAAAAAAAAwQCBQYBEAAUMCD/2gAIAQEAAQUC+VjYirV+NkuA1dAkmO9BrFa5J+xDfU2cWbeOCUZD60GilGtq2EDKiSGBlTOGYSUW9QPjLHII7ZRlQ9Ln6mtpcujAKH5YpQslhDgcfl//xAAUEQEAAAAAAAAAAAAAAAAAAABQ/9oACAEDAQE/AUf/xAAUEQEAAAAAAAAAAAAAAAAAAABQ/9oACAECAQE/AUf/xAAxEAACAQIDBAgFBQAAAAAAAAABAgMEEQASIRMiMYEFEBRBQlFxkSAwMmGxIzNyofH/2gAIAQEABj8C+U0sh4C+XE20lE6llyCPQx30yt+efpirmkN8zZF9F/34KoQVERq4xormw98RmqaqKQzCOuV77WIH6BkHG+mv288UzVlO/R1FCpR4AZAankTujX+z54GUZQPDa1uuslo5uyrRuRNUSrpp4R6nTFDUQ5qivedtopVTK0g1F7t+3lPvxwazsscnSTrsYoabMfQC/kLXbQWHvT9umMM0e8i0zHcvxUk3zYCZ2kPe7cT1XETyfxF8S1cUdTPAXLk7DSIkAOuv1KwPvzxE8FzUFCmdlIcg8RblywtUx2tXMP1JD9vCvcF8rfFmeSXZls5hzbt/yORwFUBVAsAO75f/xAAgEAEBAQACAgIDAQAAAAAAAAABESEAMSBBUWEQcYHR/9oACAEBAAE/IfCeVcXUOp8/r764KpyItnYlJq34exPIZGaafVX+vhuCxbtiZl7/ALyvYsKeAQNrLJNclc9Og9ZOVvaStHK/kCvR6nLyc7pVh1ycVe9M36tx3CNVUQUdZQrETq7h0mXtuMb0DxQQ0E+aEHLgZnD9qctfnM/AatZ6n875i8+hQxQ4xw6POwyOY6uJH9kfs4+iDMhSY4Wxj3tvk/RlEv5jJLFAFOtaF8wcAdAePry//9oADAMBAAIAAwAAABDbYDbYADLCCBASbAQbAJbbDbbf/8QAFBEBAAAAAAAAAAAAAAAAAAAAUP/aAAgBAwEBPxBH/8QAGREAAgMBAAAAAAAAAAAAAAAAEBEBIDBB/9oACAECAQE/EMkUVkxGLty3/8QAHRABAQACAgMBAAAAAAAAAAAAAREAITFBECBRYf/aAAgBAQABPxD0E4kfUFwSWFq7cAGrTtDeGsgjRN2koUphEYpnbsJiU7dHkehyPgLknBYqYqAEcwgfmX3eG9CQdGkot3RCMC0RipUBwE5U2OaEfAgnGvmsnBOVvAWyGhQTZKjTiMKTvKOGgynjAFdeFhYcSsCpMLUn9DCj5g4qjRV3JzqRBQQaAgddu/A+IE8y8oahvRP0z4ehwa6jnF8SsWiyEW6QDBsEaFBElqgiBuQDS01vkY4NMiLxaBvQAumFOIPKnTUA0AAAcevb2//Z

В итоге в rusphp добавили класс Base64TempFile для создания временных файлов из base64 (для промежуточного хранения автоматически использует стандартную директорию для временных файлов):


use ItForFree\rusphp\File\Base64\Base64TempFile;
use ItForFree\rusphp\File\Path;

if (!empty($data['photo'])) { // если пришла строка
	$base64TmpFile = new Base64TempFile($data['photo']);

	$imageFile = new UploadedFile(
	    $base64TmpFile->getPath(),
		'avatar.' . $base64TmpFile->getExtention(),
		$base64TmpFile->getMime(),
		null,
		true
	);

-- получаем UploadedFile, а дальше работаем с ним как и на обычной форме, например:

$imageFile = new UploadedFile($base64TmpFile->getPath(),
	'avatar.' . $base64TmpFile->getExtention(),
	$base64TmpFile->getMime(),
	null,
	true
);

if ($imageFile) {
	$originalFilename = pathinfo($imageFile->getClientOriginalName(), PATHINFO_FILENAME);

	// чтобы безопасно использовать имя файла как часть URL преобразуем его
	$safeFilename = transliterator_transliterate('Any-Latin; Latin-ASCII; [^A-Za-z0-9_] remove; Lower()', $originalFilename);
	$newFilename = $safeFilename . '-' . uniqid() . '.' . $imageFile->guessExtension();

	// перемещаем файл в нужную директорию             
	$currentDatePath = (new \DateTime('now'))->format('Y/m/d');
	$folderPath = Path::concat([$this->params->get('user_avatar_directory_abs'), $currentDatePath]);

	try {
		$imageFile->move(
			$folderPath,
			$newFilename
		);
	} catch (FileException $e) {
		// обрабатываем исключение на случай если что-то пошло не так
	}

	if (empty($context['object_to_populate'])) {
		$context['object_to_populate'] = new $class();
	} 

	$context['object_to_populate']->setPhotoPath(
		Path::concat([$currentDatePath, $newFilename])
	);
}

Key Words for FKN + antitotal forum (CS VSU):