<?php
// src/EventSubscriber/PreviewFileSubscriber.php
namespace App\EventSubscriber;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;
class PreviewFileSubscriber implements EventSubscriberInterface {
public static function getSubscribedEvents(): array {
return [
KernelEvents::RESPONSE => 'onKernelResponse',
];
}
public function onKernelResponse(ResponseEvent $event): void {
$request = $event->getRequest();
$response = $event->getResponse();
if (!$request->query->getBoolean('preview')) {
return;
}
if (!$response instanceof BinaryFileResponse) {
return;
}
// Cambia a inline para mostrarlo en navegador
$response->setContentDisposition(
ResponseHeaderBag::DISPOSITION_INLINE,
$response->getFile()->getFilename()
);
// Extras: AƱadir metadatos como cabeceras personalizadas
$file = $response->getFile();
$response->headers->set('X-File-Name', $file->getFilename());
$response->headers->set('X-File-Size', $file->getSize());
$response->headers->set('X-File-Extension', $file->getExtension());
$response->headers->set('X-File-Mime', mime_content_type($file->getPathname()));
}
}