我创建了一个下载路由,我的客户端通过将以下代码添加到/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");
});
答案 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
并将其应用到您的路线。