From c394da266ba528fa132df80203d11e6b39a7ccc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillaume=20Perr=C3=A9al?= <guillaume.perreal@irstea.fr> Date: Wed, 28 Jan 2015 15:27:28 +0100 Subject: [PATCH] =?UTF-8?q?UploadController:=20g=C3=A8re=20proprement=20le?= =?UTF-8?q?s=20exceptions.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Controller/UploadController.php | 59 ++++++++++++++++++++++++++------- 1 file changed, 47 insertions(+), 12 deletions(-) diff --git a/Controller/UploadController.php b/Controller/UploadController.php index 6f75b842..8f590835 100644 --- a/Controller/UploadController.php +++ b/Controller/UploadController.php @@ -8,6 +8,7 @@ namespace Irstea\FileUploadBundle\Controller; use Irstea\FileUploadBundle\Entity\UploadedFile; +use Irstea\FileUploadBundle\Exception\RejectedFileException; use Irstea\FileUploadBundle\Http\UploadedFileResponse; use Irstea\FileUploadBundle\Model\FileManagerInterface; use Irstea\FileUploadBundle\Model\UploadedFileInterface; @@ -23,6 +24,7 @@ use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; use Symfony\Component\HttpKernel\Exception\HttpException; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; use Symfony\Component\Routing\RouterInterface; +use Exception; /** * @Route("/files", service="irstea_file_upload.upload_controller") @@ -65,18 +67,19 @@ class UploadController extends Controller */ public function createAction(Request $request) { - $data = $request->request->get('file'); + try { + $data = $request->request->get('file'); - $file = $this->fileManager->create( - $data['name'], - $data['size'], - $data['type'], - isset($data['lastModified']) ? $data['lastModified'] : null - ); + $file = $this->fileManager->create( + $data['name'], + $data['size'], + $data['type'], + isset($data['lastModified']) ? $data['lastModified'] : null + ); - $parameters = ['id' => $file->getId()]; + $parameters = ['id' => $file->getId()]; - $deleteUrl = $this->router->generate('file_upload_delete', $parameters); + $deleteUrl = $this->router->generate('file_upload_delete', $parameters); return $this->createResponse( Response::HTTP_CREATED, @@ -92,6 +95,9 @@ class UploadController extends Controller // On a pas de get pour l'instant, le DELETE et ce qui y ressemble le plus [ 'Location' => $deleteUrl ] ); + } catch(\Exception $ex) { + return $this->createExceptionResponse($ex); + } } /** @@ -102,6 +108,7 @@ class UploadController extends Controller */ public function putContentAction(Request $request, UploadedFile $file) { + try { $this->validateCsrfToken($request); list($offset, $maxlen, $complete) = $this->handleRangeHeader($request); @@ -116,7 +123,11 @@ class UploadController extends Controller } return $this->createResponse(Response::HTTP_OK, 'Chunk received'); + + } catch(\Exception $ex) { + return $this->createExceptionResponse($ex); } + } /** * @@ -209,11 +220,15 @@ class UploadController extends Controller */ public function deleteAction(Request $request, UploadedFile $file) { - $this->validateCsrfToken($request); + try { + $this->validateCsrfToken($request); - $this->fileManager->delete($file); + $this->fileManager->delete($file); - return $this->createResponse(); + return $this->createResponse(); + } catch(\Exception $ex) { + return $this->createExceptionResponse($ex); + } } /** @@ -245,5 +260,25 @@ class UploadController extends Controller return $response; } + /** + * + * @param \Exception $ex + * @return JsonResponse + */ + protected function createExceptionResponse(\Exception $ex) + { + return $this->createResponse( + $ex instanceof HttpException ? $ex->getStatusCode() : Response::HTTP_INTERNAL_SERVER_ERROR, + $ex->getMessage(), + [ + 'exception' => [ + 'class' => get_class($ex), + 'file' => $ex->getFile(), + 'line' => $ex->getLine(), + 'code' => $ex->getCode(), + 'trace' => $ex->getTraceAsString(), + ] + ] + ); } } -- GitLab