Commit c394da26 authored by Guillaume Perréal's avatar Guillaume Perréal
Browse files

UploadController: gère proprement les exceptions.

Showing with 47 additions and 12 deletions
+47 -12
......@@ -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(),
]
]
);
}
}
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment