Как вывести изображение пользователя из хранилища / приложения?

Как я могу отображать изображения из папки хранения (вне общедоступной)? Я сохранил свои файлы изображений в хранилище / usernamee, но я не могу показать их в представлении. Как я могу переместить закачку в «хранилище / изображения /» (в папке с именем «изображения»)?

Просмотр

<form class="forms-sample" method="post" action="/updateprofil" enctype="multipart/form-data">
    @method('put')
    @csrf
    <div align="center">
        <img alt="User Pic" src="{{  storage_path($membre->photo) }}" id="profile-image1"
             class="img-circle img-responsive">
        <input id="pic" class="hidden" name="pic" type="file" accept="image/*">
        <div style="color:#999;">click here to change profile image</div>
    </div>
    <input type="hidden" id="idMembre" name="membre_id" value="{{  $membre->id }}">
</form>

Контроллер

public function updateprofil(Request $request)
{
    $request->validate(['cin' => 'size:8']);

    if ($request->hasFile('pic')) {
        $image = $request->file('pic');
        $filename = time() . '.' . $image->getClientOriginalExtension();
        Image::make($image)->resize(300, 300)->save(storage_path("app/usernamee/" . $filename));
        $request->pic = $filename;
    }

    $membre = Membre::findOrFail($request->membre_id);
    $membre->photo = 'app/usernamee/' . $request->pic;
    $membre->update($request->all());

    return redirect('profil');
}

Это мой взгляд на профиль пользователя

PS: Метод обновления работает для обновления информации, но не работает для фото.


person Yoss    schedule 24.03.2019    source источник


Ответы (1)


Вам либо необходимо:

1) необходимо сохранить изображение в каталоге storage/app/public - сначала вам нужно сделать символическую ссылку на путь хранения к общедоступному:

php artisan storage: ссылка

Тогда ваш способ должен работать.

2) Создайте маршрут для возврата изображения.

Route::get('show-image/{id}', function() {
   $membre = Membre::findOrFail($id);

   $file = storage_path($membre->photo);

   return response()->file($file);
})
person senty    schedule 25.03.2019
comment
Я работаю над локальным хранилищем, почему мне нужно работать в общедоступном каталоге? - person Yoss; 25.03.2019
comment
Используйте №1, если вы хотите показать изображение публично, в противном случае используйте №2. - person senty; 25.03.2019
comment
Я сделал это с # 2, он работает, но когда я редактирую поле, например, имя, фотография исчезает, и оно возвращается пустым. Как я могу это исправить? (Извините за опоздание) - person Yoss; 26.03.2019
comment
Вы имеете в виду изменение имени файла? - person senty; 26.03.2019
comment
Да, и именно тогда, когда я меняю какое-либо поле типа «имя», «фамилия», «адрес электронной почты» .. Я имею в виду, когда я меняю одно из полей, изображение исчезает - person Yoss; 26.03.2019
comment
Может это быть из-за этой строчки ($membre->photo = 'app/usernamee/' . $request->pic;) в вашем updateprofil() методе? - person senty; 26.03.2019
comment
Здесь будет размещено изображение. Если у вас есть идея изменить его так, чтобы оно работало, скажите мне - person Yoss; 26.03.2019
comment
Если путь в базе данных правильный и путь к файлу правильный, все должно работать. Убедитесь, что вы не переопределяете его - person senty; 26.03.2019