src/Controller/Api/MultiDownloadItemApiController.php line 19

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Api;
  3. use App\Entity\MultiDownloadItem;
  4. use Symfony\Component\Routing\Annotation\Route;
  5. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use Symfony\Component\HttpFoundation\Response;
  8. use Wamania\ZipStreamedResponseBundle\Response\ZipStreamedResponse;
  9. use Wamania\ZipStreamedResponseBundle\Response\ZipStreamer\ZipStreamer;
  10. class MultiDownloadItemApiController extends AbstractController
  11. {
  12.     /**
  13.      * @Route("/api/multidownload/item", name="gcs_api_multidownload_item", methods={"GET"})
  14.      */
  15.     public function getUrlAction(Request $request)
  16.     {
  17.         $multiDownloadItems $request->get('files');
  18.         if (!$multiDownloadItems) {
  19.             return new Response('No id provided');
  20.         }
  21.         $items $this->getDoctrine()->getRepository(MultiDownloadItem::class)->findByIds($multiDownloadItems);
  22.         if ($items) {
  23.             /** @var ZipStreamer $zip */
  24.             $zip $this->iterateItems($items);
  25.             return new ZipStreamedResponse($zip);
  26.         }
  27.         return new Response('Wrong ids');
  28.     }
  29.     private function iterateItems($items)
  30.     {
  31.         $name date('mdY') .'_'$this->generateRandomString();
  32.         $zipStreamer = new ZipStreamer($name.'.zip');
  33.         /** @var MultiDownloadItem $item */
  34.         foreach ($items as $item) {
  35.             $zipStreamer->add(
  36.                 $this->getParameter('kernel.project_dir').'/public'.$item->getMedia()->getUrl(),
  37.                 $name .'_'$item->getMedia()->getOriginalFilename()
  38.             );
  39.         }
  40.         return $zipStreamer;
  41.     }
  42.     function generateRandomString($length 10)
  43.     {
  44.         $characters '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
  45.         $charactersLength strlen($characters);
  46.         $randomString '';
  47.         for ($i 0$i $length$i++) {
  48.             $randomString .= $characters[rand(0$charactersLength 1)];
  49.         }
  50.         return $randomString;
  51.     }
  52. }