Удаление файлов после загрузки в laravel


Удаление файлов после загрузки в laravel

10.10.2014 01:12:54 Просмотров 110 Источник

Я создаю приложение, которое позволяет пользователю загружать файл. После загрузки я хочу, чтобы файл был удален. Конец моего кода выглядит так:

return Response::download(public_path() . '/uploads/_tmp/' . urldecode($filename));

это означает, что функция заканчивается на возврате, и я не могу удалить файл. Я попытался вызвать фильтр "после" на маршруте, но затем файл быстро удаляется.

Есть идеи?

У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/26295852/deleting-files-after-download-in-laravel#comment41261281_26295852
Вы хотите, чтобы временный файл, который создает PHP, был удален, или файл, который вы только что загрузили и поместили куда-то в вашей файловой системе? Потому что временный файл, созданный и используемый PHP в процессе загрузки, удаляется PHP автоматически.

Ответы - Удаление файлов после загрузки в laravel / Deleting files after download in laravel

Является ответом!
Matt Burrow

10.10.2014 01:30:16

Я лично использую следующее;

$response = Response::make(file_get_contents($path_to_file), $status_code, $headers);

Код состояния-это, очевидно, код, который вы хотите вернуть.

В параметре $header можно передать массив с индексами Content-Type и Content-Disposition.

Затем вы можете просто разорвать связь с $path_to_file и вернуть $response.


Гораздо более простым способом удаления файла было бы использовать ответ Джона для версий Laravel > 4.0.

Вы можете использовать deleteFileAfterSend http://laravel.com/docs/5.0/responses#other-responses

return response()->download($filePath, $fileName, $headers)->deleteFileAfterSend(true);
Jayakarthik Appasamy

10.10.2014 01:35:02

unlink('./path/filename.extension');
https://stackoverflow.com/questions/26295852/deleting-files-after-download-in-laravel/26296276#comment41263026_26296276
было бы неплохо, если бы вы могли добавить небольшое объяснение к вашему ответу, а не просто одну строчку
https://stackoverflow.com/questions/26295852/deleting-files-after-download-in-laravel/26296276#comment44828965_26296276
В вопросе он возвращает ответ. Этот код никогда даже не запустится.
juniorb2s

08.04.2015 05:47:42

$filename = storage_path() . '/testing.txt';

App::finish(function($request, $response) use ($filename)
{
    unlink($filename);
});

return Response::download($filename);
https://stackoverflow.com/questions/26295852/deleting-files-after-download-in-laravel/29518007#comment47201754_29518007
Попробуйте объяснить свой ответ.
https://stackoverflow.com/questions/26295852/deleting-files-after-download-in-laravel/29518007#comment54503257_29518007
Это работает в Laravel 4.2. Просто поместите его в контроллер вместо приложения / start / global.РНР. Блестяще!
https://stackoverflow.com/questions/26295852/deleting-files-after-download-in-laravel/29518007#comment61037099_29518007
Не используйте, если у вас есть laravel > 5.0
https://stackoverflow.com/questions/26295852/deleting-files-after-download-in-laravel/29518007#comment66724771_29518007
I second @CommandZ, используйте метод Джона выше для любой версии 5 и выше.
Jon

07.10.2015 10:45:02

Вы можете использовать deleteFileAfterSend http://laravel.com/docs/5.0/responses#other-responses

return response()->download($filePath, $fileName, $headers)->deleteFileAfterSend(true);

https://stackoverflow.com/questions/26295852/deleting-files-after-download-in-laravel/33001111#comment55021215_33001111
Смотрите комментарий @cbloss793 ниже: "это работает в Laravel 4.2. Просто поместите его в контроллер вместо приложения / start / global.РНР."
https://stackoverflow.com/questions/26295852/deleting-files-after-download-in-laravel/33001111#comment68221680_33001111
DeleteFileAfterSend(правда) прекрасно работает на фреймворк Laravel 5.3, а также. Хотя в документации об этом ничего не говорится, вы все равно можете его использовать. Возможно, в ближайшее время он будет признан устаревшим.
https://stackoverflow.com/questions/26295852/deleting-files-after-download-in-laravel/33001111#comment69807456_33001111
Обратите внимание, что deleteFileAfterSend(true)на самом деле является функцией Symfony (частью HttpFoundation), которая, по-видимому, была добавлена в 2014 году .
RashedRahat

27.01.2020 06:57:40

Просто используйте эту строку кода:

return response()->download($file_path)->deleteFileAfterSend(true);

Здесь, внутри функции загрузки путь к файлу будет передан в качестве аргумента. Допустим, для примера вы хотите создать резервную копию базы данных в файле, а также хотите удалить ее при загрузке:

$date = Carbon::now()->format('Y-m-d_h-i');
$pub_path = public_path();
$file_path = $pub_path . '/application/db_backups/' . $date . '.sql';
$output = shell_exec('mysqldump -h58.84.34.65 -uwsit -pwsit97480 websms > ' . $file_path);
return response()->download($file_path)->deleteFileAfterSend(true);
https://stackoverflow.com/questions/26295852/deleting-files-after-download-in-laravel/59924986#comment105973095_59924986
Кодовые ответы не всегда легко понять другим. Было бы здорово, если бы вы могли добавить короткий комментарий о том, как ваше предложение решает проблему ОП
https://stackoverflow.com/questions/26295852/deleting-files-after-download-in-laravel/59924986#comment105973530_59924986
Хм, спасибо за ваши отзывы. Я добавил: :)
Помочь в развитии проекта:
Закрыть X