Изображение не загружается после кодирования blob-объекта из базы данных (php, mysql, laravel)
Я пытаюсь создать картинку для каждого контакта.
это store()
в моем контроллере:
public function store()
{
$attributes = request()->validate([
'user_id' => ['required'],
'avatar' => ['required',],
'ime' => ['required', 'min:3'],
'prezime' => ['required', 'min:3'],
'broj' => ['required', 'min:3'],
]);
Kontakt::create($attributes);
return redirect('/imenikk');
}
это create.blade.php
:
<form method="POST" action="/imenikk">
{{ csrf_field() }}
<div class="container text-center">
<label for="ime">Ime</label>
<input type="text" class="form-control text-center" name="ime"
placeholder="Ime">
<label for="prezime">Prezime</label>
<input type="text" class="form-control text-center" name="prezime"
placeholder="Prezime">
<label for="broj">Broj</label>
<input type="text" class="form-control text-center" name="broj"
placeholder="Broj">
<br>
<input type="file" name="avatar" accept="image/*">
<br>
<input type="hidden" name="user_id" value='{{$user_id}}'>
<button type="submit" class="btn btn-primary">Dodaj
</div>
</form>
И это на show.blade.php
:
<img src="data:image/jpg;base64,{{ chunk_split(base64_encode($imenikk->avatar)) }}" height="500" width="500">
<img src ="data:image/jpeg;base64,{{base64_encode($imenikk->avatar)}}" height="200" width="200">
Ни один из этих 2 не работает.. Я получаю это, но изображение не загружается:
<img src="data:image/jpg;base64,SU1HXzYxODQuSlBH" height="500" width="500">
Вот как выглядит моя БД, когда я создаю контакт с изображением:
Также мне удалось расшифровать это img src= " data: image / jpg;base64, SU1HXzYxODQuSlBH
и я получаю имя изображения, когда я декодирую его, но страница все еще не отображает изображение.
У вопроса есть решение - Посмотреть?

строка кода base64 не может быть такой короткой. попробуйте проверить свою строку base64 здесь
Источник

Это другое и гораздо дольше там, что я делаю неправильно? Я кодирую имя файла, я должен кодировать что-то еще?
Источник
Ответы - Изображение не загружается после кодирования blob-объекта из базы данных (php, mysql, laravel) / Image doesn't load after encoding blob from database(php,mysql,laravel)
Является ответом!

17.12.2019 04:49:43
Кажется, ваш код base64 неверен.
Попробуйте получить реальный код base64 из файла изображения и сохранить в базе данных.
public function store()
{
$attributes = request()->validate([
'user_id' => ['required'],
'avatar' => ['required',],
'ime' => ['required', 'min:3'],
'prezime' => ['required', 'min:3'],
'broj' => ['required', 'min:3'],
]);
$file = request()->file('avatar');
$imagedata = file_get_contents($file->getRealPath());;
$base64 = base64_encode($imagedata);
$attributes['avatar'] = $base64;
Kontakt::create($attributes);
return redirect('/imenikk');
}
затем сохраните его в своем поле, и отобразить его так:
<img src={{ "data:image/jpg;base64,".$imenikk->avatar }} height="500" width="500">

Что я помещаю в $file = $request - >file ('your_file'); я думал, что должен поместить данные из blob-объекта в базу данных? Или мне нужно вручную добавлять изображения в определенную папку, а не загружать их в mysql через ввод формы?

@PavleTosic вы загружаете файл аватара для хранения в базе данных. поэтому вам нужно вызвать
request()->file('avatar')
, чтобы получить файл.

Это мое шоу() метод функции Show(запрос $запрос,контакт $imenikk) { //$контакт = контакт::получить(); $файл = $запрос->файл('аватар'); $она = функции file_get_contents($файл->getRealPath());; $в base64 = base64_encode($она); $imenikk->аватар = $в base64; вернуть вид ("показать", компактный('imenikk')); } И я получаю эту ошибку, когда я пытаюсь открыть страницу контактов на Symfony\компонент\отладки\исключения\FatalThrowableError вызов функции-члена getRealPath() на null

@PavleTosic я имею в виду в вашем
store()
, вам нужно использовать file_get_contents
и base64_encode
, а затем сохранить его в поле Аватара.

У меня в магазине() $атрибутами = запрос()->проверить([ 'ид_пользователя' => ['необходимых'], 'аватар' => ['необходимого',], 'Имэ' => ['необходимого', 'мин:3'], 'prezime' => ['необходимого', 'мин.:3'], 'входит в сотню самых крупных' => ['необходимого', 'мин.:3'] ]); "контакт"::создать($атрибутов); возврат редиректа('/imenikk'); как мне установить заданное значение в проверить и добавить его в $атрибутов переменной, так что я могу использовать создать() со всеми аргументами мне нужно пройти в свою базу данных?

Можете ли вы написать мне полный метод store (), включая код из метода, который я написал в вопросе? Кажется, мне не удается заставить его работать, я все еще получаю (вызов функции-члена getRealPath () на null) ошибку по какой-то причине

Я все еще получаю (вызов функции-члена getRealPath() на null), когда я использую метод, который вы написали

Когда я делаю вот так $файл = запрос()->файл ("аватар"); ДД($файл), я получаю значение null!

@PavleTosic ты действительно загрузил аватар? смотрите laravel-file

Я отредактировал ваш ответ с моим решением, я получил его на работу, спасибо за вашу помощь!
Помочь в развитии проекта: