下载完成时的 Lumen 回调
Lumen callback on completed download
我创建了一个下载路径,我的客户端通过将以下代码添加到 /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");
});
您需要注册一个 after Middleware
并将其应用于您的路线。
原始问题的答案
因此,为了在发送响应后获得 'callback',您可以使用所谓的 'terminable' 中间件。
为了使中间件可终止:
1) 必须是全局的; I.E 注册了中间件函数而不是 routeMiddleware
$app->middleware([
App\Http\Middleware\Myterminable::class
]);
2) 它必须有方法 'terminate ($request, $response)' 这是发送响应后将调用的方法。
public function terminate($request, $response)
{
// your code here
}
另一种选择
全局中间件似乎是对计算资源的浪费,因为它会为每个 request/response 对调用,所以我只是查看了 Lumen 的代码,发现下载方法实际上返回了一个实例
Symfony\Component\HttpFoundation\BinaryFileResponse;
我打电话给
deleteFileAfterSend(true);
这符合我最初的目标
return response()->download(getcwd() . "/targetfile")->deleteFileAfterSend(true);
我创建了一个下载路径,我的客户端通过将以下代码添加到 /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");
});
您需要注册一个 after Middleware
并将其应用于您的路线。
原始问题的答案
因此,为了在发送响应后获得 'callback',您可以使用所谓的 'terminable' 中间件。
为了使中间件可终止:
1) 必须是全局的; I.E 注册了中间件函数而不是 routeMiddleware
$app->middleware([
App\Http\Middleware\Myterminable::class
]);
2) 它必须有方法 'terminate ($request, $response)' 这是发送响应后将调用的方法。
public function terminate($request, $response)
{
// your code here
}
另一种选择
全局中间件似乎是对计算资源的浪费,因为它会为每个 request/response 对调用,所以我只是查看了 Lumen 的代码,发现下载方法实际上返回了一个实例
Symfony\Component\HttpFoundation\BinaryFileResponse;
我打电话给
deleteFileAfterSend(true);
这符合我最初的目标
return response()->download(getcwd() . "/targetfile")->deleteFileAfterSend(true);