<?php
namespace Nen\Bundle\KennisbankPlatformBundle\Controller;
use League\Flysystem\FilesystemInterface;
use League\Glide\Signatures\SignatureException;
use League\Glide\Signatures\SignatureInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Component\HttpFoundation\HeaderUtils;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\StreamedResponse;
use Symfony\Component\Routing\Annotation\Route;
class FileController extends AbstractController
{
/**
* @Route("/file/{path}", name="file_server", requirements={"path"=".+"})
*
* @param string $path
* @param Request $request
* @return Response
*/
public function server(string $path, Request $request, FilesystemInterface $storage)
{
// @todo(guido): needs to be a different method to retrieve the prefix.
if (strpos($path, 'publisher/') === 0) {
$path = 'publisher://' . $path;
} else {
$path = 'cms://' . $path;
}
$response = new StreamedResponse(function () use ($path, $storage) {
$outputStream = fopen('php://output', 'wb');
$fileStream = $storage->readStream($path, false);
stream_copy_to_stream($fileStream, $outputStream);
});
$response->headers->set('Content-Type', $storage->getMimetype($path));
$disposition = HeaderUtils::makeDisposition(
HeaderUtils::DISPOSITION_ATTACHMENT,
basename($path)
);
$response->headers->set('Content-Disposition', $disposition);
return $response;
}
}