Фотографии профиля Laravel 8 Jetstream не отображаются

Laravel 8 и Jetstream, действительно ли он новый?

Я просто попытался установить и воспроизвести его в fortify, но я не могу понять, почему на моем фото профиля не отображается изображение.

update-profile-information-form

<!-- Current Profile Photo -->
<div class="mt-2" x-show="! photoPreview">
<img src="{{ $this->user->profile_photo_url }}"
          alt="{{ $this->user->name }}"
          class="rounded-full h-20 w-20 object-cover">
</div>

.Env

APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:6IJbdi+QYczKeLT7yOw3OgPsHucXn1KxVUb27hTQKpU=
APP_DEBUG=true
APP_URL=http://127.0.0.1:8000

config / filesystems

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

person Khandoker Hirok    schedule 26.09.2020    source источник


Ответы (15)


Ваша проблема заключалась в настройке APP_URL по умолчанию в файле .env:

APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:6IJbdi+QYczKeLT7yOw3OgPsHucXn1KxVUb27hTQKpU=
APP_DEBUG=true
APP_URL=http://localhost

Команда artisan serve запустила приложение на http://127.0.0.1:8000, поэтому вы изменили APP_URL соответственно:

APP_URL=http://127.0.0.1:8000

Я бы не рекомендовал это. Иногда по разным причинам команда могла изменить порт на 8001, 8002 и т. д.

$ php artisan serve
Starting Laravel development server: http://127.0.0.1:8000
Failed to listen on 127.0.0.1:8000 (reason: Address already in use)
Starting Laravel development server: http://127.0.0.1:8001
PHP 7.4.12 Development Server (http://127.0.0.1:8001) started

Простое решение

Просто прокомментируйте или оставьте APP_URL в файле .env пустым:

#APP_URL=http://localhost
APP_URL=

Это удалит часть http: // localhost из изображений профиля и решит проблему:

<img src="/storage/profile-photos/photo.jpeg">

В любом случае у вас будет другой файл .env в производственной среде.

Кроме того

Вы внесли небольшое изменение в свой файл config / filesystems.php:

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

Исходная настройка была:

'root' => storage_path('/app/public'),

Это сработало только после того, как вы удалили и перекомпилировали символическую ссылку.
Но теперь, в каталоге вашего проекта, у вас, вероятно, возникла такая ситуация:


    - public                           - storage
      + css                              - app
      + js                                 - public
      - storage                              - profile-photos
        - public                         - public
          - storage                        - storage
            - profile-photos                 - profile-photos
        .htaccess                        + framework
        favicon.ico                      + logs
        index.php
        mix-manifest.json
        robots.txt
        web.config

По сути, вы сделали новый диск. Полагаю, это не было намеренно.
Кроме того, фотографии вашего профиля, вероятно, имеют немного запутанную часть в URL-адресе:
... / storage / public / storage / profile-photos / .. ..

Вы можете вернуться к исходным настройкам, удалить дополнительную папку и перестроить sysmlink.

config / filesystems.php

'disks' => [
    //...
    'public' => [
        'driver' => 'local',
        'root' => storage_path('app/public'),
        'url' => env('APP_URL').'/storage',
        'visibility' => 'public',
    ],
    //...
],
person Evil Yoda    schedule 07.11.2020

Сначала вам нужно создать публичное хранилище, а затем связать его. Итак, сначала перейдите в основную папку проекта laravel, а затем в общую папку. Если ссылки на хранилище не существуют, создайте ее. затем вернитесь в основную папку проекта и создайте ссылку на хранилище

$  cd (laravel project folder)
$  cd public
$  rm -r storage
$  cd ..
$  php artisan storage:link

это должно решить проблему ..

person stoneshaq    schedule 26.09.2020
comment
Напоминаем, что тем, кто использует Laravel Sail, потребуется sail artisan storage:link вместо php artisan. - person UX Andre; 31.12.2020

Установите свой APP_URL в .env, мой APP_URL = http: // localhost: 8000 и запустите команду в CLI как

php artisan storage:link

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

person Manu R S    schedule 25.12.2020
comment
Только эта команда решила эту проблему. - person Chandima; 14.05.2021

Изображение профиля успешно сохранено?

(Окно) Если да, то вот шаги, которые я исправил:

  • Удалите хранилище папок с ярлыками, созданное в / project / public /
  • Снова используйте команду php artisan storage: ссылка.
  • Обновите веб-страницу, и проблема решена.
person Khandoker Hirok    schedule 26.09.2020
comment
Это действительно работает! похоже на ошибку. - person Ishaan; 01.01.2021

Найдите в папке config файл под названием jetstream.php, найдите в возвращенном массиве ключ 'features' и раскомментируйте Features :: profilePhotos () значение.

До:

'features' => [
    // Features::profilePhotos(),
    // Features::api(),
    // Features::teams(),
],

После:

'features' => [
     Features::profilePhotos(),
    // Features::api(),
    // Features::teams(),
],
person Anil Kumar R.V    schedule 18.11.2020
comment
это была моя проблема, спасибо - person William; 02.04.2021
comment
Добро пожаловать, приятель. Приятно знать, что проблема была решена. - person Anil Kumar R.V; 04.04.2021

извините, я решил эту проблему на этом уровне

  1. Найдите файл с именем jetstream.php в папке конфигурации, найдите в возвращаемом массиве ключ 'features' и раскомментируйте Features::profilePhotos()

  2. перейдите в .env и измените URI приложения на этот APP_URL=http://localhost:8000

  3. в терминале введите:

php artisan serve
person Mostafa Alavi    schedule 11.12.2020

Я столкнулся с той же проблемой, когда работал над своим проектом с использованием Laravel 8 (текущая последняя версия). Вот два подхода, которые я решил решить:

  1. При первом подходе вы можете легко изменить URL-адрес приложения в браузере с 127.0.0.1:8000 на localhost: 8000, а затем связать общедоступный / хранилище с хранилищем / приложением / общедоступной папкой с помощью команды php artisan storage: ссылка

  2. Или во втором подходе вы можете отредактировать файл среды. Перейдите в файл конфигурации среды (.env) и измените APP_URL с http: // localhost на http://127.0.0.1:8000, а затем свяжите папку public / storage с папкой storage / app / public с помощью команды php artisan storage: link

Наконец, перезапустите приложение с помощью команды php artisan serve, теперь оно должно работать. Надеюсь, это поможет любому, кто сталкивается с такой проблемой.

person Hizbullah Watandost    schedule 18.01.2021

Я сделал это: удалил (APP_URL) на filesystems.php, и это решило мою проблему, изображение профиля не отображается в Jetstream

'public' => [
            'driver' => 'local',
            'root' => storage_path('app/public'),
            'url' => env('').'/storage',
            'visibility' => 'public',
        ],
person Mull Algibrhani    schedule 12.10.2020

В config / app.php APP_URL может потребоваться порт вроде:

'url' = ›env ('APP_URL', 'http: // localhost: 8080'),

person user14559664    schedule 01.11.2020

Убедитесь, что ваш .env APP_URL правильный, и убедитесь, что вы запустите php artisan storage: link. https://github.com/laravel/framework/issues/34319#issuecomment-691677346

person user2511140    schedule 28.12.2020

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

Пеший туризм

person EM POV    schedule 09.02.2021

Я столкнулся с той же проблемой и просто запустил php artisan storage: link, и это сработало для меня.

примечание: я запускаю эту команду при новом запуске laravel и не меняю настройку пути к хранилищу (по умолчанию)

person Kharisma Wahyudin    schedule 15.04.2021

  • перейдите в папку config и откройте файл (jetstream.php).
  • перейдите в раздел функций и раскомментируйте функцию фотографии профиля  введите описание изображения здесь
person Basir Ahmad Ahmadi    schedule 03.05.2021

Если ваши фото профиля Jetstream не отображаются, вам нужно сделать три простых шага

  1. Сначала запустите эту команду php artisan storage: ссылка
  2. Features :: profilePhotos (), включите это в config / jetstream.php
  3. Наконец и в основном измените APP_URL из файла .env (это важно), если ваш APP_URL = http: // localhost не будет отображаться, поэтому измените его на APP_URL = http://127.0.0.1:8000 или, если вы используете виртуальный хост, тогда APP_URL = http://livewire_app.dev, посмотрите, у меня это работает нормально  введите здесь описание изображения
person Ali Abbas    schedule 08.07.2021

Я также сделал это: удалил (APP_URL) из config / filesystems.php

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

Но это решило для меня только половину проблемы. Изображение теперь отображается только на панели навигации, но не на странице профиля. Для этого я сделал следующее: в файле update-profile-information.blade.php я изменил источник изображения на

/storage/profile-photos/{{basename($this->user->profile_photo_path)}}

(возможно, это не подходящее решение, но сейчас оно сработало для меня в моем учебном проекте)

person Alwyn    schedule 14.10.2020
comment
Вам лучше отредактировать свой .env и установить, например, APP_URL=http://localhost (в зависимости от того, используете ли вы xampp или что-то еще). - person AlexioVay; 06.07.2021