gpt4 book ai didi

php - 下载完成时的 Lumen 回调

转载 作者:行者123 更新时间:2023-12-04 03:20:35 24 4
gpt4 key购买 nike

我创建了一个下载路径,我的客户端通过将以下代码添加到/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");
});

最佳答案

原始问题的答案

因此,为了在发送响应后进行“回调”,您可以使用所谓的“可终止”中间件。

为了使中间件可终止:

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);

关于php - 下载完成时的 Lumen 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38629102/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com