Laravel - 发送给客户端后删除本地文件
Laravel - Delete local file after served to client
我正在使用以下工具向用户提供 PDF 文件 return
response()->download($filename);
一旦文件可供下载,就没有必要将其保留在服务器上,我想将其删除,以免它们阻塞服务器存储。下载文件后删除文件的最佳方法是什么?我打算使用可终止的中间件来处理它。这是使用 Laravel 5.1 的最佳方式吗?
只是为了 post 这里以防其他人有这个问题...
可以将文件名写入会话,然后使用可终止中间件获取会话变量并取消链接文件。
您可以将其放入队列中并进行删除作业运行在文件下载后以特定时间间隔删除文件。
Laravel 的 documentation 非常简洁。
我建议你制作Event/Listener系统,这样代码会保持干净。
1.step
EventServiceProvider.php
protected $listen = [
'App\Events\FileHaveDownloadedEvent' => [
'App\Listeners\FileHaveDownloadedListener',
],
];
2.step php artisan event:generate
在你的模型中
这样写
Event::fire(new FileHaveDownloadedEvent(['filename' => $filename]));
// 监听器
public function handle(FileHaveDownloadedEvent $event)
{
unlink('/directory/where/file/located/'.$event->filename);
}
你也可以排队:)
祝你好运!
我正在使用以下工具向用户提供 PDF 文件 return
response()->download($filename);
一旦文件可供下载,就没有必要将其保留在服务器上,我想将其删除,以免它们阻塞服务器存储。下载文件后删除文件的最佳方法是什么?我打算使用可终止的中间件来处理它。这是使用 Laravel 5.1 的最佳方式吗?
只是为了 post 这里以防其他人有这个问题...
可以将文件名写入会话,然后使用可终止中间件获取会话变量并取消链接文件。
您可以将其放入队列中并进行删除作业运行在文件下载后以特定时间间隔删除文件。
Laravel 的 documentation 非常简洁。
我建议你制作Event/Listener系统,这样代码会保持干净。
1.step
EventServiceProvider.php
protected $listen = [
'App\Events\FileHaveDownloadedEvent' => [
'App\Listeners\FileHaveDownloadedListener',
],
];
2.step php artisan event:generate
在你的模型中
这样写
Event::fire(new FileHaveDownloadedEvent(['filename' => $filename]));
// 监听器
public function handle(FileHaveDownloadedEvent $event)
{
unlink('/directory/where/file/located/'.$event->filename);
}
你也可以排队:)
祝你好运!