Во-первых, поскольку английский не является моим родным языком, прошу извинить меня за ошибки.
Я пытаюсь разработать свой первый проект через Symfony2. Однако я застрял с загрузкой файлов. Итак, я установил VichUploaderBundle, который предоставляет именно то, что мне нужно для управления: все виды загруженных медиафайлов (в основном изображения).
Зачем мне нужно загружать изображение? В моем проекте есть пользователь, и он может редактировать свой профиль. Итак, у меня есть объект ProfilePicture, который должен управлять загрузкой благодаря VichUploaderBundle. Он отлично работает, когда форма отправляется с помощью кнопки отправки или с помощью ajax.
Однако, чтобы улучшить взаимодействие с пользователем, я также добавил плагин jQuery (Cropit). Cropit дает base64 обрезанной картинки. Я отправляю все с помощью ajax.
И знаете... я борюсь. Я искал везде в Интернете, чтобы найти кого-то с началом идеи, я прочитал всю документацию, пытаясь найти другой способ сделать то, что я пытаюсь сделать.
Вот мой фактический "тестовый" код:
$base64 = $request->request->get('base64');
preg_match('/data:([^;]*);base64,(.*)/', $base64, $matches);
$data = base64_decode($matches[2]);
$ui = uniqid().'.png';
$file = 'images/profile_pictures/'. $ui;
file_put_contents($file, $data);
$picture = new File($file);
$profile->getPicture()->setImageFile($picture);
Это позволяет мне сохранить обрезанное изображение в нужном каталоге. Однако это не совсем то, чего мне хотелось бы. На самом деле, я просто пытаюсь найти способ преобразовать содержимое base64 в то, что присутствовало бы в $profile->getPicture()->setImageFile(), если бы я только что отправил изображение. Я неточен, и мне жаль. Это первый раз, когда мне нужно создать систему загрузки.
Я подумал, что может быть способ избежать отправки base64. Но что мы можем сделать с такими данными? Можем ли мы использовать jQuery для его декодирования и преобразования моей формы только для отправки формы, как если бы я просто выбрал свое изображение и хотел бы сохранить его целиком?
Как вы справляетесь с этим в своем проекте? Есть ли какой-нибудь другой набор лучше, чем этот? Я искал, безуспешно. SonataMediaBundle кажется большим для моих нужд, и я не нашел способа сохранить с ним обрезанное изображение.
Я нашел кого-то, кто хотел управлять им в Git VichUploaderBundle. Однако его проблема была закрыта до того, как был дан лучший ответ... https://github.com/dustin10/VichUploaderBundle/issues/223
Заранее спасибо за вашу помощь!