TemporaryImageController.php (3224B)
1 <?php 2 3 namespace PartKeepr\ImageBundle\Controller; 4 5 use Dunglas\ApiBundle\Action\ActionUtilTrait; 6 use Dunglas\ApiBundle\Api\ResourceInterface; 7 use FOS\RestBundle\Controller\Annotations\RequestParam; 8 use FOS\RestBundle\Controller\Annotations\View; 9 use PartKeepr\ImageBundle\Entity\TempImage; 10 use PartKeepr\ImageBundle\Response\TemporaryImageUploadResponse; 11 use Symfony\Component\HttpFoundation\File\File; 12 use Symfony\Component\HttpFoundation\File\UploadedFile; 13 use Symfony\Component\HttpFoundation\JsonResponse; 14 use Symfony\Component\HttpFoundation\Request; 15 use Symfony\Component\HttpFoundation\Response; 16 17 class TemporaryImageController extends ImageController 18 { 19 use ActionUtilTrait; 20 21 /** 22 * Handles a temporary image upload. 23 * 24 * @RequestParam(name="url",description="An URL where the image is located",strict=false) 25 * ApiDoc(section="image",output="PartKeepr\ImageBundle\Response\TemporaryImageUploadResponse") 26 * @View() 27 * 28 * @param Request $request The request to process 29 * 30 * @throws \Exception An exception if neither the userfile form parameter or an URL was given 31 * 32 * @return JsonResponse The JSON response from the temporary image upload 33 */ 34 public function uploadAction(Request $request) 35 { 36 $image = new TempImage(); 37 $imageService = $this->get('partkeepr_image_service'); 38 39 if ($request->files->has('userfile') && $request->files->get('userfile') != null) { 40 $file = $request->files->get('userfile'); 41 /* 42 * @var $file UploadedFile 43 */ 44 $imageService->replace($image, new File($file->getPathname())); 45 $image->setOriginalFilename($file->getClientOriginalName()); 46 } elseif ($request->request->has('url')) { 47 $imageService->replaceFromURL($image, $request->request->get('url')); 48 } else { 49 throw new \Exception('Error: No valid file given'); 50 } 51 52 $this->getDoctrine()->getManager()->persist($image); 53 $this->getDoctrine()->getManager()->flush(); 54 55 /** 56 * @var ResourceInterface 57 */ 58 list($resourceType) = $this->extractAttributes($request); 59 60 $serializedData = $this->get('serializer')->normalize( 61 $image, 62 'jsonld', 63 $resourceType->getNormalizationContext() 64 ); 65 66 return new JsonResponse(new TemporaryImageUploadResponse($serializedData)); 67 } 68 69 /** 70 * Uploads a webcam image. 71 * 72 * @param Request $request The request to process 73 * 74 * @return Response 75 */ 76 public function webcamUploadAction(Request $request) 77 { 78 $image = new TempImage(); 79 $imageService = $this->get('partkeepr_image_service'); 80 81 $data = $request->getContent(); 82 83 $base64 = explode(',', $data); 84 $imageService->replaceFromData($image, base64_decode($base64[1]), 'webcam.png'); 85 86 $this->getDoctrine()->getManager()->persist($image); 87 $this->getDoctrine()->getManager()->flush(); 88 89 return $image; 90 } 91 92 /** 93 * {@inheritdoc} 94 */ 95 protected function getEntityClass() 96 { 97 return 'PartKeepr\\ImageBundle\\Entity\\TempImage'; 98 } 99 }