Marcos Birro Calixto
Criador Marcos Birro Calixto 02/08/2022

Boa tarde.

POde me ajudar com isso? Recebo a imagem em base 64 do app e preciso salva-la no store.

Está o erro:

Error
Call to a member function store() on string

        if(isset($data['image'])){
            Validator::extend('base64image', function ($attribute, $value, $parameters, $validator) {
                $explode = explode(',', $value);
                $allow = ['png', 'jpg', 'svg','jpeg'];
                $format = str_replace(
                    [
                        'data:image/',
                        ';',
                        'base64',
                    ],
                    [
                        '', '', '',
                    ],
                    $explode[0]
                );
                // check file format
                if (!in_array($format, $allow)) {
                    return false;
                }
                // check base64 format
                if (!preg_match('%^[a-zA-Z0-9/+]*={0,2}$%', $explode[1])) {
                    return false;
                }
                return true;
            });

            $validacao = Validator::make($data, [
                'image' => 'base64image',

            ],['base64image'=>'Imagem inválida - Imagens aceitas: png, jpg, svg e jpeg']);

            if($validacao->fails()){
              return $validacao->errors();
            }

            $ext = substr($data['image'], 11, strpos($data['image'], ';') - 11);

            $file = str_replace('data:image/'.$ext.';base64,','',$data['image']);
            $file = base64_decode($file);

            $urlImagem = $file->store('perfis');
            $user->image = $urlImagem;

        }

        $user->save();
Manager Carlos Ferreira 02/08/2022

Olá, Marcos!
Tudo bem?

Sobre a imagem, esse frontend que envia a imagem em base64, foi você quem o escreveu?

Se sim, você tem controle sobre ele, neste caso, super recomendo que não armazene o arquivo no banco dessa forma, porque se fizer isso, esquece escala.

Por que não armazena a imagem em um serviço próprio, tipo um S3 da Amazon?
https://academy.especializati.com.br/aula/usar-a-amazon-s3-com-laravel

Carlos Ferreira
Criador Marcos Birro Calixto 02/08/2022

Boa noite.

Sim, eu fiz o vue. Mas minha ideia é caalvar a imagem no storage e gravar no banco somente a URL.

Não consigo ver o erro.

 

Marcos Birro Calixto
Manager Carlos Ferreira 02/08/2022

Mais um motivo para não trabalhar com base64

Não precisa enviar o arquivo do frontend dessa forma, pode simplificar.

Veja neste exemplo aqui como enviar um arquivo do frontend para o backend, usando Vue.js 2: https://github.com/especializati/larachat/blob/main/resources/js/pages/Profile.vue#L106

Carlos Ferreira
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!