In symfony, I have an entity Program
, which has the attribute image
. Uploading images, naming them and putting them in the right directory is done with the VichUploaderBundle
. The entity looks like this:
//...
/**
* 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;
//...
Now I wish for images to be processed before they are uploaded, which I have done with some JS that returns a base64 string. I put this string in a hidden input field, base64Image
. I then retrieve this string in my controller and try to make it into an image that I can save to my entity like so:
if ($form->isSubmitted() && $form->isValid()) {
$program = $form->getData();
$base64String = $request->request->get('base64Image');
$decodedImageString = base64_decode($base64String);
$program->setImage($decodedImageString);
//etc.....
The program occurs with the last line. $decodedImageString
is actually another string that first needs to be created into a file. I have looked into file_put_contents
to create a file as describer here, but with no luck.
The filename cannot be empty
Is the error I receive. Also I don't know if this would work with the VichUploaderBundle
and perhaps the answer in that question is also outdated. Any suggestions on what I could do?
Edit: Got the converting and uploading working with the following code:
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.';
Now I just need to load the VichUploaderBundle config somehow, or maybe not use that altogether perhaps.
$program->saveImage()
. The temporary file that is created withtempnam()
won't be recognised as file, but as a string. I tried changing the extensions to .jpeg, but that didn't work either. – Kookaburra