paulo-dutra logo

Upload de Arquivos Base64 via API Laravel 6

Fala galera, o post será sobre upload de arquivos 64 utilizando o framework Laravel. Para a criação do projeto é necessário ter o Composer instalado (gerenciador de depedências PHP).

Para criar o projeto, abra uma aba no terminal/cmd é digite o seguinte comando:

Após a criação do projeto e abrir o mesmo no editor/IDE de sua preferência, vamos criar a controller e a rota responsável por enviar o arquivo. Vamos criar primeiramente a controller para isso abra novamente o terminal e digite:

Para criar a rota vá em routes/api.php, iremos criar uma rota chamada send-file com o verbo POST que irá ser responsável por criar enviar o arquivo, apenas para padronizar a forma de envio da requisição iremos definir o nome do atributo(campo) como “file” e o mesmo deverá ser enviado em string no formato base64.

Aṕos a criação da rota, inicie o servidor utilizando o artisan por meio do comando: php artisan serve, ele irá “startar” a aplicação para utilizar a porta 8000 (caso não tenha nenhum serviço que esteja utilizando a mesma), para acessar a aplicação basta utilizar o seguinte endereço: http://localhost:8000.

Abra o arquivo app/Http/UploadController.php e defina o método sendFile e também defina o use na facade Illuminate\Support\Facades\Storage, iremos aproveitar para definir o formato que iremos receber a requisição utilizando o método has disponível atráves da request e o formato da string utilizando a função strpos do PHP.

Caso o formato ou a string de envio não seja enviado no formato correto, iremos retornar uma mensagem com o status code HTTP 422 indicando assim que houve um erro.

Iremos precisar de um arquivo no formato base64 para isso irei utilizar essa imagem da logo do Laravel e também o site base64-image.de para converter a imagem para o formato base64. Para converter o arquivo de imagem, basta acessar o site base64-image.de clicar ou arrastar o arquivo para “Drag & Drop Images Anywhere or click Here” e esperar o processo de conversão.

base64-image.de-conversao

Depois de converter o arquivo para visualizar o código base64 da imagem clique no botão ”</>show code”

base64-image.de-obter-base64

E copie o código base64 que lhe foi apresentado.

Após a realização dessa definição inicial, precisamos de um cliente para realizar as requisições HTTP para o nosso endpoint para isso irei utilizar o Postman.

Com o Postman ou outro Cliente HTTP devidamente instalado, iremos “criar” a requisição com as seguintes caracteristicas: verbo HTTP: POST endereço: http://localhost:8000/api/send-file, corpo da requisição no formato JSON com os seguintes dados:

postman-request

Caso realize o envio, você irá obter o valor da string base64 que foi enviado:

postman-get-base64

Note que essa string vem com a descrição do tipo de arquivo (entensão que esta sendo enviado), iremos utilizar essa informação para após realizar o base64_decode enviar o mesmo com a extensão correta. Volte até o arquivo app/Http/UploadController.php vá até o metódo sendFile retire o dd($base64) e adicione as seguintes linhas:

Caso você realize o no primeiro explode dd($extension = explode(‘/’, $base64)); irá ver a separação da string em array onde os indices são delimitados pela incidência do caractere /(barra). Já o segundo explode se você realizar um dd($extension = explode(‘;’, $extension[1]));, irá notar algo interessante, um array com dois indices onde o primeiro é a extensão do arquivo sem o ponto e o segundo é o inicio do base64, iremos utilizar esse primeiro indice pois ele é a extensão propriamente dita.

postman-explode-extesion

Depois iremos gerar um nome de forma aleatória para o arquivo, obter o arquivo a string base64 sem os dados da extensão e realizar o envio, com isso o nosso método fica da seguinte forma:

Note que foi definido um path para envio do arquivo.O path publico do storage utilizando o disco local do projeto que fica localizado em Storage/app/public o path posterior chamado “base64-files” foi criado durante o envio do arquivo.

Ao utilizar Storage::put sem definir para qual disco você quer enviar o arquivo ou definindo o disco “local” o mesmo já acessa o seguinte caminho Storage/app, faltando apenas o restante do caminho que foi definido na varíavel $path = ‘public/base64-files/’

Após a explicação sobre o path que irá armazenar os arquivos vá ao postman ou o cliente que você escolheu para realizar as requisições e faça a requisição novamente. Se a requisição estiver no formato correto, você irá obter uma resposta parecida com a que esta sendo apresentada abaixo:

postman-send-file-success

Para ver o arquivo que foi enviado vá até a pasta Storage/app/public/base64-files e veja se o nome retornado na resposta é o mesmo nome do arquivo:

file-sended

Caso envie uma requisição que não esteja no formato correto, você irá obter a seguinte resposta:

postman-send-file-success

Para acessar o arquivo que foi enviado, iremos criar um link simbólico para isso vá até o terminal/cmd e digite o seguinte comando:

Realiza a criação do link simbólico abra o browser e digite localhost:8000/storage/base64-files/nome-do-arquivo.extensao, conforme exemplo apresentado abaixo:

access-file

Reposítório do Projeto

E ai o que achou ? comente abaixo.