<?php
namespace App\CoreBundle\Controller\Admin;
use App\CoreBundle\Model\UploadedFile\UploadedFileFacade;
use League\Flysystem\FilesystemInterface;
use App\CoreBundle\Component\HttpFoundation\DownloadFileResponse;
use Symfony\Component\Routing\Annotation\Route;
class UploadedFileController extends AdminBaseController
{
/**
* @var UploadedFileFacade
*/
private $uploadedFileFacade;
/**
* @var FilesystemInterface
*/
private $filesystem;
public function __construct(
UploadedFileFacade $uploadedFileFacade,
FilesystemInterface $filesystem
) {
$this->uploadedFileFacade = $uploadedFileFacade;
$this->filesystem = $filesystem;
}
/**
* @Route("/file/{uploadedFileId}/{uploadedFilename}", name="admin_uploaded_file_download", requirements={"uploadedFileId" = "\d+"}, methods={"get"})
* @param int $uploadedFileId
* @param string $uploadedFilename
* @return DownloadFileResponse
*/
public function downloadAction(int $uploadedFileId, string $uploadedFilename): DownloadFileResponse
{
$uploadedFileSlug = pathinfo($uploadedFilename, PATHINFO_FILENAME);
$uploadedFileExtension = pathinfo($uploadedFilename, PATHINFO_EXTENSION);
$uploadedFile = $this->uploadedFileFacade->getByIdSlugAndExtension($uploadedFileId, $uploadedFileSlug, $uploadedFileExtension);
$filePath = $this->uploadedFileFacade->getAbsoluteUploadedFileFilepath($uploadedFile);
return new DownloadFileResponse(
$uploadedFile->getNameWithExtension(),
$this->filesystem->read($filePath),
$this->filesystem->getMimetype($filePath)
);
}
}