[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
Renato Machado
Criador Renato Machado 01/06/2021

Estou tentando fazer update de uma imagem usando curl, mais sem sucesso, pode me ajudar a identificar o erro?

public function update(Request $request, $id)

    {

        $imagem = new \CURLFile($request->imagem);

        $data = [

            'user_id' => 1,

            'codigo'  => $request->codigo,

            'nome'    => $request->nome,

            'price'   => str_replace(',','.', $request->price),

            'data'    => date('Y-m-d'),

            'imagem'  => new \CURLFile($request->imagem)

        ];

        //dd($imagem);

        $token  = $this->token;

        $curl   = curl_init();

        

        curl_setopt_array($curl, [

            CURLOPT_RETURNTRANSFER  => true,

            CURLOPT_CUSTOMREQUEST => 'PUT',

            CURLOPT_URL             => 'http://127.0.0.1:8000/api/produtos/'.$id,

            CURLOPT_POSTFIELDS      => "codigo=" . $request->codigo . "&nome=" . $request->nome . "&price=" .$request->price. "&imagem" .json_encode($imagem),

            //CURLOPT_POSTFIELDS      => $data,

            CURLOPT_HTTPHEADER      => [

                "Authorization: Bearer" .$token->token

            ],

        ]);

 

        $update = curl_exec($curl);

        curl_close($curl);

 

        if($update)//true ou false

            return redirect()->route('produtos.index')

            ->with(['success' => 'Atualizado com sucesso!']);

 

        return redirect()->route('produtos.index')

        ->with(['error' => 'Não foi possivel Cadastrar']);

 

    }

Manager Carlos Ferreira 01/06/2021

Olá, Renato!
Tudo bem?

Primeiro uma dica amigo, usa ServiceLayer para organizar o seu código, e deixar o controller mais enxuto (veja o curso do LaraFood <- recomendo)

Agora sobre o erro, vou precisar de mais detalhes.

Teve erro? Qual? (print: https://pt-br.imgbb.com/)

Essa requisição chegou na outra API?

Carlos Ferreira
Criador Renato Machado 01/06/2021

Justamente a imagem parece não chegar, não dá erro mais não salva a imagem na pasta produtos e salva no BD no campo imagem informações que desconheço, vou enviar imagem de como está salvando

Renato Machado
Criador Renato Machado 01/06/2021

Envie uma imagem mostrando como esta chegando no BD ao atualizar

https://ibb.co/DpYqtMm

Renato Machado
Criador Renato Machado 01/06/2021

Codigo atualizado no Model

 

public function updateProducts($data$id){

        $token  = $this->token;
        $curl   = curl_init();
        
        curl_setopt_array($curl, [
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_CUSTOMREQUEST  => 'PUT',
            CURLOPT_URL            => 'http://127.0.0.1:8000/api/produtos/'.$id,
            //CURLOPT_POSTFIELDS      => "codigo=" . $request->codigo . "&nome=" . $request->nome . "&price=" .$request->price. "&imagem" .json_encode($imagem),
            CURLOPT_POSTFIELDS     => http_build_query($data),
            CURLOPT_HTTPHEADER     => [
                "Authorization: Bearer" .$token->token
            ],
        ]);

        $response = curl_exec($curl);
        curl_close($curl);

    }
Renato Machado
Criador Renato Machado 01/06/2021

codigo no Controller

public function update(Request $request$id)
    {
        $data = [
            'user_id' => 1,
            'codigo'  => $request->codigo,
            'nome'    => $request->nome,
            'price'   => str_replace(',','.'$request->price),
            'data'    => date('Y-m-d'),
            'imagem'  => new \CURLFile($request->imagem),
            'method' => 'PUT'
        ];

        $update = new AuthApi;
        $update->updateProducts($data$id);

        if($update)//true ou false
            return redirect()->route('produtos.index')
            ->with(['success' => 'Atualizado com sucesso!']);

        return redirect()->route('produtos.index')
        ->with(['error' => 'Não foi possivel Cadastrar']);

    }
Renato Machado
Manager Carlos Ferreira 01/06/2021

Lá onde faz o upload está errado (ou recebendo os dados errados, sem validar)

Tem os códigos no GitHub?

E por que não usa algo mais simples, como o Guzzle, ou ainda melhor o próprio http do Laravel?
Veja como é simples amigo, enviar arquivos em uma request http no Laravel: https://laravel.com/docs/8.x/http-client#sending-a-raw-request-body

Se tiver alguma dúvida como implementar o Http do Laravel, eu te ajudo, conta comigo amigo.

Carlos Ferreira
Criador Renato Machado 01/06/2021

Obrigado pelo retorno Carlos, estou indo por partes e gostaria muito que me ajudasse a entender essa lógica do put no Curl, qdo faço pelo postman tudo da certo cadastro, update, delete, mais qdo tento consumir não consigo fazer o upload para o update, apenos consigo cadastrar e detar, é a nível de aprendizado mesmo, depois vou partir pro guzzle, vc consegue me ajudar nessa? Pois não sei mais o que fazer

Renato Machado
Criador Renato Machado 01/06/2021

Não tenho o cód no git nem sei usar corretamente ainda e nem tenho cadastro

Renato Machado
Manager Carlos Ferreira 01/06/2021

Trabalhar com o Git é algo muito importante, nessa aula falo sobre o Git + GitHub:
https://academy.especializati.com.br/aula/versionamento-de-codigo-com-git

-----

Por que o seu código CURL não está funcionando?
Embora esteja enviando o file, está pegando o dado da request, você pode salvar o arquivo local e enviar ele via CURL (ou melhor, com o Guzzle, ou melhor ainda com o Http do Laravel)

Carlos Ferreira
Criador Renato Machado 01/06/2021

"Por que o seu código CURL não está funcionando?
Embora esteja enviando o file, está pegando o dado da request, você pode salvar o arquivo local e enviar ele via CURL (ou melhor, com o Guzzle, ou melhor ainda com o Http do Laravel)"

Ok, mais tem como vc me auxiliar nisso? é muito importante para meu aprendizado, estou de fato querendo aprender de verdade a programar, mais queria muito saber fazer isso usando o PUT do curl, ja pesquisei mais não achei nada na internet!! te agradeceria muito se me ajudasse a entender

Renato Machado
Manager Carlos Ferreira 01/06/2021

Vamos passo por passo, beleza?

0º Colocar os projetos no GitHub, porque fica mais fácil para mim te ajudar (https://academy.especializati.com.br/aula/versionamento-de-codigo-com-gi)

1º Receber o arquivo no projeto local, e salvar;

2º Enviar o arquivo local para o projeto

----

Vamos agora resolver o passo 0 e 1.

No passo 1 você recebe o arquivo no seu projeto, e faz o upload dele (observer o método store):
https://github.com/especializati/curso-laravel-8/blob/master/app/Http/Controllers/PostController.php

Carlos Ferreira
Criador Renato Machado 01/06/2021

Blz Carlos vou estudar o Github e colocar os arquivos, porém a API está funcionando corretamente, ao testar pelo Postman, cadastra e faz o upload sem problemas, porém ao tentar consumir usando Laravel e Curl, consigo recuperar os dados, cadastrar sem problemas e ao fazer update somente a imagem não tenho sucesso, então acredito que já podemos destacar a possibilidade de erro da Api...mais vou incluir no github

Renato Machado
Manager Carlos Ferreira 01/06/2021

Pra mim que estou por fora do projeto e tendo acesso a pequenas partes fica mais difícil te ajudar como você merece. Por isso o GitHug é útil, porque vai me dar uma visão geral do seu projeto.

Esse projeto mesmo, que está tentando enviar a imagem, ele é um gateway?
Digo, ele recebe o arquivo e já envia para outra API?

Carlos Ferreira
Criador Renato Machado 01/06/2021

Blz Carlos, segue o git(s) pra vc me ajudar a entender porque não faz update da imagem com o Curl o cadastro esta ok

Api:

https://github.com/renatoribeiromachado/apiProdutos

Consumir essa API

https://github.com/renatoribeiromachado/consumirApiCurl

Renato Machado
Manager Carlos Ferreira 01/06/2021

Te enviei um e-mail, agendando um dia para gerar um exemplo prático e real dentro do que você já tem.

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

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!