diff --git a/Controller/UploadController.php b/Controller/UploadController.php index 6f75b842dbac5e7a9b9fe9c0dfd7183f66046dae..8f5908354cad2edbd1110759d6677790259334fa 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(), + ] + ] + ); } }