我正在Symfony应用程序中用户可以裁剪图像。在有人下载了裁剪后的图像后,我希望应用程序将其从服务器中删除。Symfony下载后删除文件
我现在有这个控制器动作:
/**
* @Route(
* "/download/{crop_id}",
* name="download_cropped",
* options={"expose"=true}
*)
*
* @ParamConverter(
* "crop",
* class="WebwijsCropperBundle:Crop",
* options={"id" = "crop_id"}
*)
*
*/
public function downloadAction(Crop $crop)
{
$dir = $this->container->getParameter('image.cropped.dir');
return new BinaryFileResponse($dir . '/' . $crop->getCroppedFile());
}
我创造了这个事件监听,我想发送的响应后删除图像。这个监听器会在每次响应后触发。
那么,如何获得我需要知道的信息,如果响应来自正确的控制器操作。我怎样才能得到crop_id参数,所以我知道要删除哪个文件?
class FileRemovalListener
{
private $logger;
public function __construct(LoggerInterface $logger)
{
$this->logger = $logger;
}
public function onKernelTerminate(PostResponseEvent $event)
{
$response = $event->getResponse();
$request = $event->getRequest();
// what do i have to do here to know
// from which controller action the response comes?
}
}
这是services.yml服务定义
WebwijsCropperBundle\EventListener\FileRemovalListener:
tags:
- { name: kernel.event_listener, event: kernel.terminate, method: onKernelTerminate }
创建一个新的deleteAction。然后定义重定向路由到deleteAction下载 – 2017-08-26 11:25:39
后我会像去:如果用户点击下载按钮 ,您发送Ajax调用某种deleteAction'的'你转发ID 或 你给所有裁剪图像图像的生命周期,你有一个cron作业,可以删除所有已经过期的图像,每15分钟或类似的东西。 – kunicmarko20