📅  最后修改于: 2023-12-03 14:43:46.211000             🧑  作者: Mango
当我们在 Laravel 应用程序中进行文件下载时,有时需要在下载完成后删除该文件以节省磁盘空间。在这篇文章中,我们将讨论如何在 Laravel 中下载文件后删除它。
首先,我们需要创建一个路由来处理文件下载请求。我们可以在 web.php
文件中添加以下代码:
Route::get('/download', function () {
$path = storage_path('app/example.pdf');
if (!File::exists($path)) {
abort(404);
}
$headers = [
'Content-Type' => 'application/pdf'
];
return response()->download($path, 'example.pdf', $headers);
});
以上代码指定了下载的文件路径,检查该文件是否存在,然后返回文件下载响应。
要在下载完成后删除文件,我们可以使用 download()
方法的第三个参数。该参数接受一个回调函数,在下载完成后执行该回调函数。我们可以在该回调函数中删除文件。我们更新上面的代码:
Route::get('/download', function () {
$path = storage_path('app/example.pdf');
if (!File::exists($path)) {
abort(404);
}
$headers = [
'Content-Type' => 'application/pdf'
];
return response()->download($path, 'example.pdf', $headers, 'inline', true, true, function () use ($path) {
File::delete($path);
});
});
上述代码中,我们使用了 true
表示以 attachment
下载文件,在下载完成后,将调用回调函数删除文件。如果要在浏览器中打开文件(而不是下载),可以使用 inline
代替。
这就是在 Laravel 中下载文件后删除文件的方法。我们可以通过设置 download()
方法的第三个参数来处理在下载完成后执行的操作。如上所述,我们可以使用回调函数来删除文件。