Эффективные способы удаления файлов после загрузки в Laravel

В Laravel загрузка файлов — обычная задача веб-приложений. Однако важно очистить загруженные файлы, чтобы предотвратить беспорядок и оптимизировать использование хранилища. В этой статье мы рассмотрим различные методы удаления файлов после их успешной загрузки в Laravel. Мы предоставим примеры кода и объясним каждый метод простыми словами, так что давайте углубимся!

Метод 1: использование макроса ответа
Один из подходов — создать собственный макрос для класса Responseв Laravel. Этот макрос позволяет нам прикрепить обратный вызов, который будет выполнен после отправки ответа клиенту. В рамках этого обратного вызова мы можем удалить загруженный файл.

// Define the macro in a service provider or a custom macro file
use Illuminate\Support\Facades\Response;
Response::macro('deleteAfterDownload', function ($filePath) {
    return response()->download($filePath)->deleteFileAfterSend(true);
});
// Usage in a controller
public function downloadFile()
{
    $filePath = public_path('files/sample.pdf');
    return response()->deleteAfterDownload($filePath);
});

Метод 2: использование метода delete
Другой метод — использовать метод delete, предоставляемый фасадом StorageLaravel. После загрузки файла мы можем просто вызвать этот метод, чтобы удалить его.

use Illuminate\Support\Facades\Storage;
public function downloadFile()
{
    $filePath = 'storage/files/sample.pdf';
    $fileContents = Storage::get($filePath);

    // Perform additional operations or response preparation if needed

    Storage::delete($filePath); // Delete the file

    return response($fileContents)
        ->header('Content-Type', 'application/pdf');
}

Метод 3: планирование удаления с помощью Cron
Если вы хотите удалить файлы позже, вы можете использовать функцию планирования задач Laravel с заданиями cron. Создайте запланированную команду, которая удаляет загруженные файлы, и настройте задание cron для периодического запуска этой команды.

// Create a new command using the artisan command:make
php artisan make:command DeleteDownloadedFiles
// In the handle method of the generated command class
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Storage;
public function handle()
{
    $filesToDelete = Storage::files('public/downloads');

    foreach ($filesToDelete as $file) {
        Storage::delete($file);
    }
}
// Register the command in the schedule method of the Kernel class
protected function schedule(Schedule $schedule)
{
    $schedule->command('delete:downloaded-files')->daily();
}

Используя эти методы, вы можете легко удалить загруженные файлы в Laravel. Первый метод позволяет удалять файлы сразу после загрузки, второй метод удаляет их сразу после отправки ответа, а третий метод планирует удаление с помощью заданий cron. Выберите метод, который лучше всего соответствует вашим требованиям, и сохраните чистоту и оптимизацию своего хранилища!