public function uploadAction(Request $request)
{
$uploadedFile = new TempUploadedFile();
$fileService = $this->get('partkeepr_uploadedfile_service');
if ($request->files->has('userfile') && $request->files->get('userfile') != null) {
/**
* @var $file UploadedFile
*/
$file = $request->files->get('userfile');
if (!$file->isValid()) {
switch ($file->getError()) {
case UPLOAD_ERR_INI_SIZE:
$error = $this->get('translator')->trans('The uploaded file is too large.');
break;
default:
$error = $this->get('translator')->trans('Unknown error, error code %code', ['code' => $file->getError()]);
break;
}
throw new \Exception($error);
}
if ($this->container->hasParameter("partkeepr.upload.limit") && $this->container->getParameter("partkeepr.upload.limit") !== false && $file->getSize() > $this->container->getParameter("partkeepr.upload.limit")) {
throw new \Exception($this->get('translator')->trans('The uploaded file is too large.'));
}
/*
* @var $file UploadedFile
*/
$fileService->replace($uploadedFile, new File($file->getPathname()));
$uploadedFile->setOriginalFilename($file->getClientOriginalName());
} elseif ($request->request->has('url')) {
$fileService->replaceFromURL($uploadedFile, $request->request->get('url'));
} else {
throw new \Exception($this->get('translator')->trans('No valid file given'));
}
$this->getDoctrine()->getManager()->persist($uploadedFile);
$this->getDoctrine()->getManager()->flush();
/**
* @var ResourceInterface
*/
list($resourceType) = $this->extractAttributes($request);
$serializedData = $this->get('serializer')->normalize($uploadedFile, 'jsonld', $resourceType->getNormalizationContext());
return new JsonResponse(new TemporaryImageUploadResponse($serializedData));
}