Есть два способа сделать это.
Предположим, у вас есть файл в storage/app/download.zip
:
1. Потому чтоLaravel использует внутреннюю HttpFoundation от Symfony, вы можете использовать метод deleteFileAfterSend
:
public function download()
{
return response()
->download(storage_path('app/download.zip'))
->deleteFileAfterSend(true);
}
2. Создать Terminable Middleware , который удаляетфайл после подготовки ответа на загрузку.
class StorageDownload
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
return $next($request);
}
public function terminate($request, $response)
{
\Storage::delete('download.zip');
}
}
Вам нужно зарегистрировать промежуточное программное обеспечение и назначить его вашему маршруту , чтобы он работал.
Что касается запуска загрузки с использованием JavaScript, то будет работать что-то столь же тривиальное, как установка местоположения окна:
axios
.post('files/export/' + file.id, formData)
.then(function() {
window.location = 'files/download/' + file.id
});
Не волнуйтесь, это не отойдет от вашей текущей страницы, это просто вызовет загрузку.