Я пытаюсь отобразить изображение, хранящееся в моем файле local. Эти загруженные файлы находятся в папке Storage
Я использую следующий код для отображения изображения
@foreach($publications as $p)
<div class = "card" style = "width: 18rem;">
<img class = "card-img-top" src = "{{URL('public/storage/app/{$p->file_name}')}}" alt = "{{$p->file_name}}" />
<div class = "card-body">
<p class = "card-text">{{$p->description}}</p>
</div>
</div>
@endforeach
Но я получил:
что случилось?
РЕДАКТИРОВАТЬ 1
Я использую php artisan storage:link, отображается консоль
The [public/storage] directory has been linked.
Но это все еще не работает
@LeventeOtta не работает, но отображается консоль The [public/storage] directory has been linked.
Как выглядит ваша папка public? (По возможности добавьте скриншот)






Первый вам нужно сделать
php artisan storage:link
так что ваша папка хранения, к которой wepapp не может получить доступ, обычно связана с вашим общедоступным папку, чтобы ваше приложение могло получить доступ к изображениям, как будто они находятся в общей папке но он будет хранить их в папке хранилища, тогда вы должны поместить что-то вроде этого, чтобы отобразить изображение
я думаю, что это будет так
<img src = "/storage/2/{{$p->file_name}}"/>
вы можете отредактировать путь к пути в вашем приложении, если этот путь не работает
надеюсь, это сработает с вами
Изменить, я поделюсь с вами примером из моего кода при миграции миграция пользователей
$table->string('image');
контроллер
$imageName = time().'.'.request()->image->getClientOriginalExtension();
request()->image->move(public_path('userpicture'), $imageName);
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'image' => $imageName,
'password' => Hash::make($data['password']),
]);
обратите внимание, что метод создания, который я здесь использую, работает только тогда, когда вы помещаете эти поля в пользовательскую модель, поэтому не берите в голову, что вы можете использовать все, что хотите, в части хранения данных, но сосредоточьтесь на этих трех строках.
$imageName = time().'.'.request()->image->getClientOriginalExtension();
request()->image->move(public_path('userpicture'), $imageName);
'image' => $imageName,
как вы можете видеть, функция перемещения перемещает изображение в общую папку и помещает его в папку userpicture, а затем последняя строка сохраняет имя изображения в базе данных, чтобы я мог получить к нему доступ позже, чтобы отобразить изображение
и тогда я мог бы просто сделать это, чтобы отобразить изображение
<img class = "img-responsive img-rounded" src = "{{ asset('userpicture/1561335133.jpg') }}" alt = "User picture">
Я не храню файл в общедоступной папке, как вы можете видеть на первом изображении. Должен ли я хранить в этой папке?
братан, у wepapp в laravel нет превлигий для доступа к папкам, таким как хранилище, и поэтому мы обычно связываем хранилище с общедоступным, потому что, если вы хотите, чтобы изображение было доступно, вы должны либо разместить его непосредственно в общедоступном, либо поместить его в хранилище, а затем связать его с общедоступная, потому что общедоступная папка, к которой wepapp может получить доступ и отображать свои файлы в вашем коде, вы пропустили этот момент и всегда помните, что файлы css файлы .js и изображения должны быть общедоступными или в хранилище со ссылкой на общедоступную v
я поделился с вами своим кодом, который я написал двумя днями ранее, и он отлично работает
php artisan storage:link создает символическую ссылку на /storage/app/public
Но похоже, что ваши файлы находятся в /storage/app/files попробуйте переместить файлы в общую папку.
вы можете использовать помощника по ресурсам, чтобы показать файл {{ asset("storage/{$p->file_name}") }}
Не работает <img class = "card-img-top" src = "{{ asset("storage/{$p->file_name}") }}" alt = "{{$p->file_name}}" />
если вы используете {{ asset("storage/2/filename.txt") }}, файл должен находиться в /storage/app/public/2/filename.txt
Возможно, вы забыли связать свою папку
storage/app/publicс папкойpublic. Попробуйте запуститьphp artisan storage:link