partkeepr

fork of partkeepr
git clone https://git.e1e0.net/partkeepr.git
Log | Files | Refs | Submodules | README | LICENSE

TemporaryFileController.php (4600B)


      1 <?php
      2 
      3 namespace PartKeepr\UploadedFileBundle\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 Nelmio\ApiDocBundle\Annotation\ApiDoc;
     10 use PartKeepr\ImageBundle\Response\TemporaryImageUploadResponse;
     11 use PartKeepr\UploadedFileBundle\Entity\TempUploadedFile;
     12 use Symfony\Component\HttpFoundation\File\File;
     13 use Symfony\Component\HttpFoundation\File\UploadedFile;
     14 use Symfony\Component\HttpFoundation\JsonResponse;
     15 use Symfony\Component\HttpFoundation\Request;
     16 use Symfony\Component\HttpFoundation\Response;
     17 
     18 class TemporaryFileController extends FileController
     19 {
     20     use ActionUtilTrait;
     21 
     22     /**
     23      * Handles a temporary file upload.
     24      *
     25      * @RequestParam(name="url",description="An URL where the file is located",strict=false)
     26      * @ApiDoc(section="file",output="PartKeepr\UploadedFileBundleBundle\Response\TemporaryFileUploadResponse")
     27      * @View()
     28      *
     29      * @param Request $request The request to process
     30      *
     31      * @throws \Exception An exception if neither the userfile form parameter or an URL was given
     32      *
     33      * @return JsonResponse The JSON response from the temporary file upload
     34      */
     35     public function uploadAction(Request $request)
     36     {
     37         $uploadedFile = new TempUploadedFile();
     38         $fileService = $this->get('partkeepr_uploadedfile_service');
     39 
     40         if ($request->files->has('userfile') && $request->files->get('userfile') != null) {
     41             /**
     42              * @var UploadedFile
     43              */
     44             $file = $request->files->get('userfile');
     45             if (!$file->isValid()) {
     46                 switch ($file->getError()) {
     47                     case UPLOAD_ERR_INI_SIZE:
     48                         $error = $this->get('translator')->trans('The uploaded file is too large.');
     49                         break;
     50                     default:
     51                         $error = $this->get('translator')->trans(
     52                             'Unknown error, error code %code',
     53                             ['code' => $file->getError()]
     54                         );
     55                         break;
     56                 }
     57 
     58                 throw new \Exception($error);
     59             }
     60 
     61             if ($this->container->hasParameter("partkeepr.upload.limit") &&
     62                 $this->container->getParameter("partkeepr.upload.limit") !== false &&
     63                 $file->getSize() > $this->container->getParameter("partkeepr.upload.limit")) {
     64                 throw new \Exception($this->get('translator')->trans('The uploaded file is too large.'));
     65             }
     66 
     67             /**
     68              * @var $file UploadedFile
     69              */
     70             $fileService->replace($uploadedFile, new File($file->getPathname()));
     71             $uploadedFile->setOriginalFilename($file->getClientOriginalName());
     72         } elseif ($request->request->has('url')) {
     73             $fileService->replaceFromURL($uploadedFile, $request->request->get('url'));
     74         } else {
     75             throw new \Exception($this->get('translator')->trans('No valid file given'));
     76         }
     77 
     78         if ($request->request->has("description")) {
     79             $uploadedFile->setDescription($request->request->get("description"));
     80         }
     81 
     82         $this->getDoctrine()->getManager()->persist($uploadedFile);
     83         $this->getDoctrine()->getManager()->flush();
     84 
     85         /**
     86          * @var ResourceInterface
     87          */
     88         list($resourceType) = $this->extractAttributes($request);
     89 
     90         $serializedData = $this->get('serializer')->normalize(
     91             $uploadedFile,
     92             'jsonld',
     93             $resourceType->getNormalizationContext()
     94         );
     95 
     96         return new JsonResponse(new TemporaryImageUploadResponse($serializedData));
     97     }
     98 
     99     /**
    100      * Uploads a webcam image.
    101      *
    102      * @param Request $request The request to process
    103      *
    104      * @return Response
    105      */
    106     public function webcamUploadAction(Request $request)
    107     {
    108         $file = new TempUploadedFile();
    109         $fileService = $this->get('partkeepr_uploadedfile_service');
    110 
    111         $data = $request->getContent();
    112 
    113         $base64 = explode(',', $data);
    114         $fileService->replaceFromData($file, base64_decode($base64[1]), 'webcam.png');
    115 
    116         $this->getDoctrine()->getManager()->persist($file);
    117         $this->getDoctrine()->getManager()->flush();
    118 
    119         return $file;
    120     }
    121 
    122     /**
    123      * {@inheritdoc}
    124      */
    125     protected function getEntityClass()
    126     {
    127         return 'PartKeepr\\UploadedFileBundle\\Entity\\TempUploadedFile';
    128     }
    129 }