我在我的Silex应用程序中使用Knp\Snappy\Pdf生成pdf.文件名是随机的并保存到tmp目录中.
$filename = "/tmp/$random.pdf"
$snappy->generate('/tmp/body.html', $filename, array(), true);
Run Code Online (Sandbox Code Playgroud)
我想在回复中返回pdf,
$response = new Response(file_get_contents($filename));
$response->headers->set('Pragma', 'public');
$response->headers->set('Content-Type', 'application/pdf');
return $response;
Run Code Online (Sandbox Code Playgroud)
pdf正确显示在Web浏览器中.请求完成后,具有随机文件名的文件仍然存在.在返回响应之前,我无法取消链接文件.我已经尝试使用register_shutdown_function注册一个关闭函数并从那里取消链接文件.然而,这似乎不起作用.有任何想法吗?
小智 12
尽管这已经过时了,但是如果有人像我一样最近搜索谷歌.这是我找到的解决方案.
在Silex中从sendFile返回的BinaryFileResponse上有一个deleteFileAfterSend()方法.所以在你的控制器中你可以做到:
return $app ->sendFile($filepath)
->setContentDisposition(ResponseHeaderBag::DISPOSITION_INLINE, $fileName)
->deleteFileAfterSend(true);
Run Code Online (Sandbox Code Playgroud)
您可以使用完成中间件:
完成应用程序中间件允许您在将响应发送到客户端后执行任务(如发送电子邮件或记录)
这是它的外观:
$app->finish(function (Request $request, Response $response) use ($app) {
if (isset($app["file_to_remove"])) {
unlink($app["file_to_remove"];
}
});
//in your controller
$app["file_to_remove"] = $filename;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2598 次 |
| 最近记录: |