2017-08-26 13 views
0

私はユーザーが画像をトリミングできる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 } 
+0

新しいdeleteActionを作成します。ユーザーは、ダウンロードボタンをクリックした場合、あなたはdeleteAction' 'のいくつかの種類にAJAX呼び出しを送信 、あなたはあなたが与えるID または を転送:そのdeleteActionにリダイレクトルートを定義 –

+0

をダウンロードした後、私のようなものとなるだろうすべてのクロップされた画像の画像に生涯を費やし、15分ごとに期限切れになった画像やそのようなものをすべて削除するcronジョブがあります。 – kunicmarko20

答えて

2

のサービス定義である:

public function downloadAction(Crop $crop) 
{ 
    $dir = $this->container->getParameter('image.cropped.dir'); 
    $response = new BinaryFileResponse($dir . '/' . $crop->getCroppedFile()); 

    $response->deleteFileAfterSend(true); 

    return $response; 
} 
+0

私には意味があります。また、エンティティを削除する必要がありますが、応答が送信される前にそれを行うことができます。これが私にとってうまくいくかどうか試してみて、正しい答えを記入してください! –

+0

それはしばらくかかりました、私は休暇中でした。魅力的な作品! –

-1

使用

deleteFileAfterSend(bool $shouldDelete) 

をこれがtrueに設定されていると、ファイルはリンクされません要求が送信された後 注:X-Sendfileヘッダーが使用されている場合、deleteFileAfterSend設定は使用されません。

関連する問題