Изображение laravel не найдено в общедоступном / хранилище

Я пытаюсь получить доступ к изображениям для моего проекта.

Я запустил ссылку на хранилище php artisan

Laravel создает общедоступное/хранилище

когда я загружаю изображение в хранилище/приложение, я вижу изображение в хранилище/приложении, но не в общедоступном/хранилище.

Когда я пытаюсь просмотреть изображение в браузере, я получаю ошибку 404

контроллер.php

Property::create([
'SittingRoom'=> request()->file('sittingroom')->store('apartments')
]);

лезвие.php

<img src = "{{asset('storage/'.$duplex->SittingRoom)}}">

ссылка в браузере

http://127.0.0.1:8000/storage/apartments/HNLDysVUdRG7ZTBkF2qFGk2B2tAKYzYcVImNEWLx.jpg

после запуска ремесленной ссылки на хранилище

C:\xampp\htdocs\OPAAM> хранилище php artisan: ссылка

ИНФОРМАЦИЯ Ссылка [C:\xampp\htdocs\OPAAM/public\storage] подключена к [C:\xampp\htdocs\OPAAM\storage\app/public].

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
4
0
303
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Почему не нашел public/storage?

Нужно проверить

  1. ВАЖНО: символическая ссылка не создается. Это нужно проверить в общей папке! Возможно, команде не удалось создать символическую ссылку, потому что каталог/файл с таким именем уже существует в каталоге public! Удалите его, если есть такой каталог/файл, и снова запустите команду.
  2. ВАЖНО: В .env нужно FILESYSTEM_DISK=public (по умолчанию)
  3. ВАЖНО: Может быть файл .htaccess, который блокирует доступ к любому файлу. Вы можете проверить наличие этого файла в каталогах public и storage/app/public.
  4. Он называет неверный путь.
  5. Файл действительно не существует, имеет неправильное расширение и т. д.

Кстати, вспомогательная функция asset() используется корректно, и полученная ссылка тоже выглядит корректно.

Я не знаю, каково значение фрагмента кода, отображаемого в «controller.php», для отображения существующего файла. Как я предполагаю, вы убедились, что файл существует.

Как проверить скрытые файлы (как символическую ссылку)?

Получить список скрытых файлов/папок.

Линукс:

ls -la "<path of project>/public"

Окна:

dir -h "<path of project>/public"




Больше информации

О каталоге public/storage

Каталог public/storage физически не существует в Laravel. Все файлы для сохранения должны быть помещены в каталог storage/app/public. Это будет физический каталог, который вы можете сделать доступным с помощью символической ссылки.

Символическая ссылка

Виртуальная ссылка, которая связывает несуществующий путь с существующим. В нашем примере мы можем связать несуществующий путь public/storage с физически существующим storage/app/public каталогом. Как? У нас есть два варианта для этого. Либо используйте команду php artisan storage:link в Laravel, специально предназначенную для этой цели, либо настройте ее вручную в операционной системе. Очевидно, первое решение является более очевидным.

Почему так устроено?

В каталоге storage мы можем хранить другие конфиденциальные файлы, такие как файлы журналов, файлы кеша и т. д. Кроме того, мы также можем хранить общедоступные файлы, которые при желании можно сделать общедоступными с помощью символической ссылки. Каталог public — это каталог в фреймворке Laravel, к которому на самом деле обращается пользователь. Он не может получить доступ ни к каким другим файлам, кроме файлов с соответствующей конфигурацией документации. Таким образом, вы можете контролировать то, чем хотите поделиться.

Краткое содержание

Если вы создадите символическую ссылку, она будет работать должным образом. Например, вы можете получить доступ к файлу storage/app/public/images/test.png через виртуальный путь: public/storage/images/test.png.

Документация: https://laravel.com/docs/10.x/filesystem#the-public-disk

Ответ принят как подходящий

Проблема заключалась в том, что в config/filesystems.php

'default' => env('FILESYSTEM_DISK', 'public'),

но в файле .env

FILESYSTEM_DISK=local 

Эта конфигурация сохраняет ваши изображения в Storage/app вместо storage/app/public.

Изображения, сохраненные в storage/app, недоступны для общего доступа. Итак, вам нужно изменить файл .env

Другие вопросы по теме