Изображение не загружается после кодирования blob-объекта из базы данных (php, mysql, laravel)

Изображение не загружается после кодирования blob-объекта из базы данных (php, mysql, laravel)

17.12.2019 12:38:03 Просмотров 42 Источник

Я пытаюсь создать картинку для каждого контакта.

это 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">

Вот как выглядит моя БД, когда я создаю контакт с изображением:

enter image description here

Также мне удалось расшифровать это img src= " data: image / jpg;base64, SU1HXzYxODQuSlBH

и я получаю имя изображения, когда я декодирую его, но страница все еще не отображает изображение.

У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/59364633/image-doesnt-load-after-encoding-blob-from-databasephp-mysql-laravel#comment104925488_59364633
строка кода base64 не может быть такой короткой. попробуйте проверить свою строку base64 здесь
https://stackoverflow.com/questions/59364633/image-doesnt-load-after-encoding-blob-from-databasephp-mysql-laravel#comment104926348_59364633
Это другое и гораздо дольше там, что я делаю неправильно? Я кодирую имя файла, я должен кодировать что-то еще?

Ответы - Изображение не загружается после кодирования blob-объекта из базы данных (php, mysql, laravel) / Image doesn't load after encoding blob from database(php,mysql,laravel)

Является ответом!
TsaiKoga

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">
https://stackoverflow.com/questions/59364633/image-doesnt-load-after-encoding-blob-from-databasephp-mysql-laravel/59366547#comment104946476_59366547
Что я помещаю в $file = $request - >file ('your_file'); я думал, что должен поместить данные из blob-объекта в базу данных? Или мне нужно вручную добавлять изображения в определенную папку, а не загружать их в mysql через ввод формы?
https://stackoverflow.com/questions/59364633/image-doesnt-load-after-encoding-blob-from-databasephp-mysql-laravel/59366547#comment104946769_59366547
@PavleTosic вы загружаете файл аватара для хранения в базе данных. поэтому вам нужно вызвать request()->file('avatar'), чтобы получить файл.
https://stackoverflow.com/questions/59364633/image-doesnt-load-after-encoding-blob-from-databasephp-mysql-laravel/59366547#comment104947640_59366547
Это мое шоу() метод функции Show(запрос $запрос,контакт $imenikk) { //$контакт = контакт::получить(); $файл = $запрос->файл('аватар'); $она = функции file_get_contents($файл->getRealPath());; $в base64 = base64_encode($она); $imenikk->аватар = $в base64; вернуть вид ("показать", компактный('imenikk')); } И я получаю эту ошибку, когда я пытаюсь открыть страницу контактов на Symfony\компонент\отладки\исключения\FatalThrowableError вызов функции-члена getRealPath() на null
https://stackoverflow.com/questions/59364633/image-doesnt-load-after-encoding-blob-from-databasephp-mysql-laravel/59366547#comment104947714_59366547
@PavleTosic я имею в виду в вашем store(), вам нужно использовать file_get_contentsи base64_encode, а затем сохранить его в поле Аватара.
https://stackoverflow.com/questions/59364633/image-doesnt-load-after-encoding-blob-from-databasephp-mysql-laravel/59366547#comment104948254_59366547
У меня в магазине() $атрибутами = запрос()->проверить([ 'ид_пользователя' => ['необходимых'], 'аватар' => ['необходимого',], 'Имэ' => ['необходимого', 'мин:3'], 'prezime' => ['необходимого', 'мин.:3'], 'входит в сотню самых крупных' => ['необходимого', 'мин.:3'] ]); "контакт"::создать($атрибутов); возврат редиректа('/imenikk'); как мне установить заданное значение в проверить и добавить его в $атрибутов переменной, так что я могу использовать создать() со всеми аргументами мне нужно пройти в свою базу данных?
https://stackoverflow.com/questions/59364633/image-doesnt-load-after-encoding-blob-from-databasephp-mysql-laravel/59366547#comment104948739_59366547
Можете ли вы написать мне полный метод store (), включая код из метода, который я написал в вопросе? Кажется, мне не удается заставить его работать, я все еще получаю (вызов функции-члена getRealPath () на null) ошибку по какой-то причине
https://stackoverflow.com/questions/59364633/image-doesnt-load-after-encoding-blob-from-databasephp-mysql-laravel/59366547#comment104949154_59366547
Я все еще получаю (вызов функции-члена getRealPath() на null), когда я использую метод, который вы написали
https://stackoverflow.com/questions/59364633/image-doesnt-load-after-encoding-blob-from-databasephp-mysql-laravel/59366547#comment104949739_59366547
Когда я делаю вот так $файл = запрос()->файл ("аватар"); ДД($файл), я получаю значение null!
https://stackoverflow.com/questions/59364633/image-doesnt-load-after-encoding-blob-from-databasephp-mysql-laravel/59366547#comment104949769_59366547
@PavleTosic ты действительно загрузил аватар? смотрите laravel-file
https://stackoverflow.com/questions/59364633/image-doesnt-load-after-encoding-blob-from-databasephp-mysql-laravel/59366547#comment104950213_59366547
Я отредактировал ваш ответ с моим решением, я получил его на работу, спасибо за вашу помощь!
Закрыть X