流明回调完成下载

时间:2016-07-28 06:55:20

标签: php laravel download response lumen

我创建了一个下载路由,我的客户端通过将以下代码添加到/app/Http/routes.php来成功下载该文件:

$app->get('/dl', function() use ($app){
    return response()->download(getcwd() . "/targetfile");
});

但是现在我想以某种方式对一个get请求的给定实例的文件传输完成后执行回调。我该怎么办?

为了更加具体一点,我试图在文件下载后删除该文件,但这不起作用:

$app->get('/dl', function() use ($app){
    unlink(getcwd() . "/targetfile");
    return response()->download(getcwd() . "/targetfile");
});

2 个答案:

答案 0 :(得分:1)

回答原始问题

所以为了进行回调'一旦发送了回复,您就会使用所谓的“可终止的”#33;中间件。

为了使中间件可以终止:

1)它必须是全球性的; I.E注册了中间件函数而不是routeMiddleware

$app->middleware([
    App\Http\Middleware\Myterminable::class
]);

2)它必须有方法'终止($ request,$ response)'这是在发送响应后将被调用的方法。

public function terminate($request, $response)
{
    // your code here
}

替代

全局中间件似乎浪费了计算资源,因为它调用了每个请求/响应对,所以我只是查看了Lumen的代码,发现下载方法实际上正在返回

的实例
Symfony\Component\HttpFoundation\BinaryFileResponse;

我打电话给

deleteFileAfterSend(true); 

这符合我的最初目标

return response()->download(getcwd() . "/targetfile")->deleteFileAfterSend(true);

答案 1 :(得分:0)

您需要注册一个after Middleware并将其应用到您的路线。

  

Documentation about Middleware