Created
July 18, 2017 07:22
-
-
Save marcw/7dfbb224c8973d6fa1df79e07c5e0a7c to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace AudienceHero\Bundle\FileBundle\Action; | |
use ApiPlatform\Core\Bridge\Symfony\Validator\Exception\ValidationException; | |
use AudienceHero\Bundle\FileBundle\Entity\File; | |
use AudienceHero\Bundle\FileBundle\Factory\FileFactory; | |
use AudienceHero\Bundle\FileBundle\Uploader\UploaderInterface; | |
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method; | |
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; | |
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security; | |
use Symfony\Bridge\Doctrine\RegistryInterface; | |
use Symfony\Component\HttpFoundation\Request; | |
use Symfony\Component\HttpFoundation\Response; | |
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; | |
use Symfony\Component\Serializer\SerializerInterface; | |
use Symfony\Component\Validator\Validator\ValidatorInterface; | |
class UploadAction | |
{ | |
/** @var UploaderInterface */ | |
private $uploader; | |
/** @var FileFactory */ | |
private $fileFactory; | |
/** @var ValidatorInterface */ | |
private $validator; | |
/** @var RegistryInterface */ | |
private $registry; | |
/** @var SerializerInterface */ | |
private $serializer; | |
public function __construct(RegistryInterface $registry, FileFactory $fileFactory, UploaderInterface $uploader, ValidatorInterface $validator, SerializerInterface $serializer) | |
{ | |
$this->registry = $registry; | |
$this->fileFactory = $fileFactory; | |
$this->uploader = $uploader; | |
$this->validator = $validator; | |
$this->serializer = $serializer; | |
} | |
/** | |
* @Route("/api/upload", name="files_upload") | |
* @Method({"POST"}) | |
* @Security("has_role('ROLE_USER')") | |
*/ | |
public function __invoke(Request $request) | |
{ | |
$request->setRequestFormat('json'); | |
$uploadedFile = $request->files->get('file'); | |
if (!$uploadedFile) { | |
throw new BadRequestHttpException('No file present in the request'); | |
} | |
$file = $this->fileFactory->createFromUploadedFile($uploadedFile); | |
$constraints = $this->validator->validate($file, null, ['upload']); | |
if (0 !== count($constraints)) { | |
throw new ValidationException($constraints); | |
} | |
$uri = $this->uploader->upload($uploadedFile, '/upload/', $file->getRemoteName()); | |
$file->setUri($uri); | |
$em = $this->registry->getManager(); | |
$em->persist($file); | |
$em->flush(); | |
$content = $this->serializer->serialize($file, 'jsonld'); | |
return new Response($content, 200, ['Content-Type' => 'application/ld+json']); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment