Prévisualisation du fichier si clic sur le nom du fichier + ajout icone voir
Some checks failed
Apply PHP CS Fixer / php-cs-fixer (push) Failing after 13s
CI / build-test (push) Successful in 1m37s
rector / Rector (push) Has been cancelled

This commit is contained in:
Melaine Gérard 2025-02-19 14:23:39 +01:00
parent 7141c8d1f3
commit 0aecfd62eb
2 changed files with 16 additions and 8 deletions

View File

@ -89,7 +89,10 @@ class FilesController extends AbstractController
'last_modified' => $file['lastModified'],
'size' => $file['fileSize'] ?? null,
'url' => 'file' === $file['type']
? $this->generateUrl('app_files_app_file_proxy', ['filename' => $file['path']], UrlGeneratorInterface::ABSOLUTE_URL)
? $this->generateUrl('app_files_app_file_proxy', ['filename' => $file['path'], 'preview' => false], UrlGeneratorInterface::ABSOLUTE_URL)
: $this->generateUrl('app_files_index', ['path' => $file['path']]),
'previewUrl' => 'file' === $file['type']
? $this->generateUrl('app_files_app_file_proxy', ['filename' => $file['path'], 'preview' => true], UrlGeneratorInterface::ABSOLUTE_URL)
: $this->generateUrl('app_files_index', ['path' => $file['path']]),
];
}
@ -114,7 +117,7 @@ class FilesController extends AbstractController
* @throws FilesystemException
*/
#[Route('/file-proxy', name: 'app_file_proxy')]
public function fileProxy(Filesystem $defaultAdapter, #[MapQueryParameter('filename')] string $filename)
public function fileProxy(Filesystem $defaultAdapter, #[MapQueryParameter('filename')] string $filename, #[MapQueryParameter('preview')] bool $preview)
{
$file = $this->normalizePath($filename);
@ -134,6 +137,7 @@ class FilesController extends AbstractController
$mimetype = 'application/octet-stream';
}
$response = new StreamedResponse(static function () use ($file, $defaultAdapter): void {
$outputStream = fopen('php://output', 'w');
$fileStream = $defaultAdapter->readStream($file);
@ -141,11 +145,14 @@ class FilesController extends AbstractController
});
$response->headers->set('Content-Type', $mimetype);
$disposition = HeaderUtils::makeDisposition(
HeaderUtils::DISPOSITION_ATTACHMENT,
basename($file)
);
$response->headers->set('Content-Disposition', $disposition);
if (!$preview) {
$disposition = HeaderUtils::makeDisposition(
HeaderUtils::DISPOSITION_ATTACHMENT,
basename($file)
);
$response->headers->set('Content-Disposition', $disposition);
}
return $response;
}

View File

@ -54,7 +54,7 @@
{% else %}
<twig:ux:icon name="line-md:folder-filled" class="w-6 h-6" />
{% endif %}
<a class="text-blue-700 dark:text-blue-500 hover:text-blue-900 dark:hover:text-blue-700" href="{{ file.url }}">{{ file.path|basename }}</a>
<a class="text-blue-700 dark:text-blue-500 hover:text-blue-900 dark:hover:text-blue-700" href="{{ file.previewUrl }}" {{ file.type == 'file' ? 'target="_blank"' : '' }}>{{ file.path|basename }}</a>
</th>
<td class="px-6 py-4">
{% if file.type == 'file' %}
@ -82,6 +82,7 @@
</td>
<td class="px-6 py-4 flex gap-2 light:text-black">
{% if file.type == 'file' %}
<a title="Permet de voir le fichier" href="{{ file.previewUrl }}" class="hover:text-blue-700 duration-300"><twig:ux:icon class="w-6 h-6" name="fa6-solid:eye" /></a>
<a title="Permet de télécharger le fichier" href="{{ file.url }}" class="hover:text-blue-700 duration-300"><twig:ux:icon class="w-6 h-6" name="fa6-solid:download" /></a>
{% if is_granted('file_write', parentDir) %}
<a title="Permet de renommer le fichier" href="{{ path('app_files_rename', {