Я пытаюсь отобразить изображения из папки storage / app / public. Всякий раз, когда мой контроллер извлекает изображения из этой папки с
$images = Storage::files('public');
Файлы, извлеченные отсюда, имеют префикс public/
, а не storage/
.
Проблема, связанная с этим, заключается в том, что образ можно найти localhost/storage/filename.jpg
, но нельзя найти с помощью localhost/public/filename.jpg
или localhost/storage/public/filename.jpg
.
Я могу решить эту проблему, вручную отключив общедоступный префикс и заменив его хранилищем, но это не особенно изящный способ решения проблем.
Я выполнил команду php artisan storage: link, и повторный запуск приводит к сообщению The "public/storage" directory already exists.
.
Laravel поставляется со встроенным диском public
в конфигурации хранилища.
Чтобы перечислить все файлы в папке storage/app/public
с префиксом без, используйте:
\Storage::disk('public')->files();
Чтобы получить правильный URL-адрес файлов в папке storage/app/public
, используйте:
\Storage::disk('public')->url($file);
Чтобы вернуть массив URL-адресов файлов внутри папки storage/app/public
, вот пример комбинации:
array_map(function ($f) {
return \Storage::disk('public')->url($f);
}, \Storage::disk('public')->files());
У вас не должно быть
/public/
в ваших URL-адресах.public
должен быть серверным DocumentRoot для вашего проекта.