Профиль Laravel 8 Jetstream — фотографии не отображаются

#laravel #jetstream

#laravel #jetstream

Вопрос:

Laravel 8 и jetstream, это действительно что-то новое?

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

обновить-профиль-информация-форма

 <!-- 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
  

конфигурация / файловые системы

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

Ответ №1:

Ваша проблема заключалась в настройке 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'),
  

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

 - общедоступное хранилище
   css - приложение
   js - public
 - хранилище - профиль-фотографии
 - общедоступный - общедоступный
 - хранилище - хранилище
 - профиль-фотографии - профиль-фотографии
 .htaccess   framework
favicon.ico   журналы
index.php
mix-manifest.json
robots.txt
web.config

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

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

config/filesystems.php

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

Ответ №2:

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

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

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

Комментарии:

1. Просто быстрое напоминание, что для тех, кто использует Laravel Sail, вам понадобится sail artisan storage:link вместо php artisan.

Ответ №3:

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

 php artisan storage:link
  

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

Ответ №4:

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

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

  • Удалите хранилище папок быстрого доступа, созданное в /project/public/
  • Используйте команду php artisan storage: снова свяжите
  • Обновите веб-страницу, и она решена.

Комментарии:

1. Это должен быть правильный ответ, работает с первой попытки. Спасибо

Ответ №5:

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

Перед:

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

После:

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

Комментарии:

1. Всегда пожалуйста, приятель. Приятно сознавать, что это действительно решило вашу проблему.

Ответ №6:

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

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

Комментарии:

1. В конечном итоге это привело меня к проблеме, которая заключалась в том, что мой APP_URL не был правильно установлен в файле .env.

Ответ №7:

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

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

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

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

Ответ №8:

Прежде всего, мы предполагаем, что вы уже включили в конфигурации / jetstream функцию profilePhoto

Измените свой env-файл на artisan serve link, который уже запущен. Вот так

   APP_URL=http://127.0.0.1:8000
  

Они выполняют эти команды

  1. хранилище php artisan: ссылка
  2. php artisan optimize
  3. конфигурация php artisan: очистить

Перезагрузите или загрузите снова свой профиль с фотографиями и готово

Ответ №9:

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

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

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

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

 php artisan serve
  

Ответ №10:

Я знаю, что здесь есть много других ответов, и это несколько более старый вопрос, но, поскольку он занимает много места в поиске Google, я собираюсь добавить то, что, по моему мнению, является моей проблемой, в надежде, что это может помочь кому-то, кто сталкивается с подобной проблемой.

Я смог увидеть, что моя фотография профиля была загружена, и все настройки и предложения здесь казались правильными, но я по-прежнему не получал никаких результатов при попытке получить доступ к user.profile_photo_url в моем шаблоне. Оказалось, что в HandleInertiaRequests.php Я делился пользовательским объектом, но разрешал ему показывать только определенные свойства. Мне просто нужно было добавить «profile_photo_url» в список свойств, чтобы это выглядело так:

 public function share(Request $request)
{
    return array_merge(parent::share($request), [
        'ziggy' => function () use ($request) {
            return array_merge((new Ziggy)->toArray(), [
                'location' => $request->url(),
            ]);
        },
        'user' => fn () => $request->user()
            ? $request->user()->only('id', 'name', 'email', 'email_verified_at', 'current_team_id', 'account_id', 'profile_photo_url')
            : null,
    ]);
}
  

изображение функции, в которой используется общий доступ

Ответ №11:

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

‘url’ => env(‘APP_URL’, ‘http://localhost:8080 ‘),

Ответ №12:

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

Ответ №13:

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

Привет, привет

Ответ №14:

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

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

Ответ №15:

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

Ответ №16:

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

  1. Сначала запустите эту команду php artisan storage:link
  2. Функции::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 видишь, у меня это прекрасно работает введите описание изображения здесь

Ответ №17:

В моем случае я последовал чьим-то предложениям несколько месяцев назад, чтобы изменить аватары пользовательского интерфейса по умолчанию на Gravatar, и моя пользовательская модель реализовывала функции функции hasProfilePhoto… теперь, если это не относится к вам, я рекомендую внедрить соответствующие функции в вашу пользовательскую модель, особенно потому, что JetStream предназначен не для обновления пакета поставщика, а для начальной загрузки вашего приложения. По крайней мере, вы можете поиграть с выводами этих функций и выяснить, в чем проблема. Похоже, основная проблема заключается в том, что фотография загружается, но не извлекается с помощью функции ниже, которую вы можете реализовать в пользовательской модели и посмотреть, какая часть вывода неверна:

  public function getProfilePhotoUrlAttribute()
    {
        return $this->profile_photo_path
                    ? Storage::disk($this->profilePhotoDisk())->url($this->profile_photo_path)
                    : $this->defaultProfilePhotoUrl();
    }
  

Надеюсь, это поможет.

Ответ №18:

Я также сделал это: удалил (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)}}
  

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

Комментарии:

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