В Symfony у меня есть сущность Program
, которая имеет атрибут image
. Загрузка изображений, присвоение им имен и размещение их в нужном каталоге осуществляется с помощью VichUploaderBundle
. Сущность выглядит так:
//...
/**
* NOTE: This is not a mapped field of entity metadata, just a simple property.
*
* @Assert\Image(
* maxSize="5M",
* mimeTypesMessage="The file you tried to upload is not a recognized image file"
* )
* @Vich\UploadableField(mapping="program_image", fileNameProperty="imageName")
*
* @var File
*/
private $image;
/**
* @ORM\Column(type="string", length=191, nullable=true)
*/
private $imageName;
//...
Теперь я хочу, чтобы изображения обрабатывались до их загрузки, что я сделал с некоторым JS, который возвращает строку base64. Я поместил эту строку в скрытое поле ввода, base64Image
. Затем я извлекаю эту строку в моем контроллере и пытаюсь превратить ее в изображение, которое я могу сохранить в своей сущности следующим образом:
if ($form->isSubmitted() && $form->isValid()) {
$program = $form->getData();
$base64String = $request->request->get('base64Image');
$decodedImageString = base64_decode($base64String);
$program->setImage($decodedImageString);
//etc.....
Программа выполняется с последней строки. $decodedImageString
фактически другая строка, которую сначала нужно создать в файл. Я посмотрел в file_put_contents
, чтобы создать файл как описатель здесь , но безуспешно.
Имя файла не может быть пустым
Это ошибка, которую я получаю. Также я не знаю, будет ли это работать с VichUploaderBundle
, и, возможно, ответ на этот вопрос также устарел. Любые предложения о том, что я мог бы сделать?
Edit:
Получил конвертацию и загрузку, работая со следующим кодом:
define('UPLOAD_DIR', 'images/');
$img = $request->request->get('base64Image');
$img = str_replace('data:image/jpeg;base64,', '', $img);
$img = str_replace(' ', '+', $img);
$data = base64_decode($img);
$file = UPLOAD_DIR . uniqid() . '.jpeg';
$success = file_put_contents($file, $data);
print $success ? $file : 'Unable to save the file.';
Теперь мне просто нужно как-то загрузить конфигурацию VichUploaderBundle, или, возможно, вообще не использовать ее.