В моем приложении Laravel 6 файлы хранятся в папке storage/uploads
, и поэтому вы не можете создать прямую ссылку на них. Для доступа к файлам существует маршрут, который вызывает метод из контроллера.
Route::middleware(['auth'])->group(function () {
Route::get('uploads/{filename}', 'UploadController@getFile')->name('uploads.get');
}
UploadController@getFile
метод обращается к storage/uploads
и загружает файл.
public function getFile(string $filename)
{
return response()->download(storage_path('uploads/' . $filename));
}
Еслииспользуется промежуточное программное обеспечение auth
, загружается только один файл с кодом 200, а для других файлов возвращается код 302
view.blade.php
...
@foreach($user->files as $file)
<img src="{{ route('uploads.get', $file) }}" class="img-thumbnail">
@endforeach
...
При обновлении страницы загружается еще один файл. После того, как они сохранены в кеше, все файлы успешно загружаются с кодом 200.
Эта проблема решается, если удалить промежуточное ПО auth
.
Route::get('uploads/{filename}', 'UploadController@getFile')->name('uploads.get');
Что я делаю не так?
Обновление
Тот же результат, если я использую функцию response()->file()
вместо response()->download()
.
Интересно, что все ответы с кодом 302 инициируют запросы к /login
. Некоторые из этих запросов возвращаются с кодом 200, другие с кодом 302 также. Приложение использует стандартную систему аутентификации Laravel.