Невозможно отобразить изображение в laravel - PullRequest
0 голосов
/ 29 мая 2020

Я попытался отобразить изображение с laravel с помощью запроса. Изображения хранятся в каталоге хранилища, и символическая ссылка с «publi c» уже установлена.

У меня есть попытался использовать: src="{{storage_path('app/public/'.$post->post_image)}}"

src="{{ asset('storage/'.$post->post_image) }}"

src="{{$post->post_image}}"

Тестирование, я обнаружил, что могу использовать путь stati c для успешного отображения изображения вот так:

src="{{ asset('storage/images/image_name.jpeg')}}"

Однако это не то, что я ищу.

Запрос {{$post->post_image}} возвращает следующее:

127.0.0.1: 8000 / images / image_name.jpeg

EDIT: если я go редактирую базу данных и добавляю «storage /» перед URL-адресом изображения, тогда я могу использовать src="{{asset($post->post_image)}}" для отображения это.

Как упоминалось ранее, я уже пробовал src="{{asset('storage/' . $post->post_image)}} без изменения базы данных.

Ответы [ 4 ]

0 голосов
/ 01 июня 2020

Спасибо всем за ваш вклад, вот как я исправил это, используя вклад jstarnate и Abiola:

Я создал вспомогательный URL-адрес и правильно отформатировал его с помощью str_replace, например:

    public function url()
{
    return str_replace("http://localhost/storage/http://127.0.0.1:8000/","http://127.0.0.1:8000/storage/",Storage::url($this->post_image));
}
0 голосов
/ 30 мая 2020

Сохраняйте только имя изображения в своей базе данных.

Не добавляйте путь.

В этой модели может быть метод stati c, который возвращает путь в виде строки like (return "images / app";)

У вас может быть другой метод, который возвращает image_url, который будет путь + имя изображения

0 голосов
/ 30 мая 2020

Я считаю, что Storage::url может здесь помочь.

В вашей модели Post вы можете определить вспомогательный URL-адрес следующим образом:

public function url()
{
    return Storage::url($this->post_image);
}

Не забудьте импортировать фасад Storage.

use Illuminate\Support\Facades\Storage;

А затем получить изображение следующим образом:

{{ $post->url() }}

Также убедитесь, что у вас создана символическая c ссылка:

php artisan storage:link

ОБНОВЛЕНО

В .env добавьте следующее:

FILESYSTEM_DRIVER=public

Он изменяет значение по умолчанию FILESYSTEM_DRIVER на public в config/filesystems.php, что означает, что теперь он использует приведенную ниже конфигурацию в том же файле

'public' => [
     'driver' => 'local',
     'root' => storage_path('app/public'),
     'url' => env('APP_URL').'/storage',
     'visibility' => 'public',
],

Затем запустите команду php artisan config:cache

https://laravel.com/docs/7.x/filesystem#file -урлов

0 голосов
/ 29 мая 2020

Вы должны сохранить относительный путь к изображению, после этого вы сможете получить доступ следующим образом:

src="{{ asset('storage/'. $post->post_image )}}"

для получения дополнительной информации: docs

...