📜  laravel 下载后删除文件 - PHP (1)

📅  最后修改于: 2023-12-03 14:43:46.211000             🧑  作者: Mango

Laravel 下载后删除文件 - PHP

当我们在 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() 方法的第三个参数来处理在下载完成后执行的操作。如上所述,我们可以使用回调函数来删除文件。