DEV Community

joellytton
joellytton

Posted on

Como Salvar um PDF no Banco de Dados PostgreSQL usando Laravel

Neste tutorial, vamos explorar como salvar arquivos PDF no banco de dados PostgreSQL utilizando o framework Laravel. Esta abordagem pode ser útil em casos em que você deseja armazenar os arquivos diretamente no banco de dados em vez de no sistema de arquivos.

Passo 1: Configuração do Banco de Dados
Primeiramente, assegure-se de que você configurou corretamente o banco de dados PostgreSQL no arquivo .env do seu projeto Laravel. Certifique-se de que as credenciais e detalhes de conexão estejam corretos.

Passo 2: Migração do Banco de Dados
Em seguida, crie uma migração para a tabela onde os PDFs serão armazenados. Por exemplo, crie uma migração usando o comando:
php artisan make:migration create_uploads_table.

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateUploadsTable extends Migration
{
    public function up(): void
    {
        Schema::create('uploads', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('mime');
            $table->binary('data');
            $table->timestamps();
        });
    }

    public function down(): void
    {
        Schema::dropIfExists('uploads');
    }
}
Enter fullscreen mode Exit fullscreen mode

Em seguida, execute a migração usando o comando:
php artisan migrate.

Passo 3: Implementação na Aplicação Laravel
Agora, vamos implementar a lógica para salvar e recuperar os PDFs na sua aplicação Laravel. Suponhamos que você tenha um controlador chamado PdfController.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Response;

class PdfController extends Controller
{
    public function store(Request $request)
    {
        $name = $request->file('pdf_file')->getClientOriginalName();
        $mime = $request->file('pdf_file')->getClientMimeType();
        $data = base64_encode(file_get_contents($request->file('pdf_file')));

        DB::table('uploads')->insert(['name' => $name, 'mime' => $mime, 'data' => $data]);

        return redirect('/')->with('success', 'PDF enviado com sucesso.');
    }

    public function show(int $id)
    {
        $pdf = DB::table('uploads')->find($id);

        if (!$pdf) {
            abort(404);
        }

        $content = base64_decode($pdf->data);

        $response = Response::make($content, 200);
        $response->header('Content-Type', 'application/pdf');

        return $response;
    }
}
Enter fullscreen mode Exit fullscreen mode

Passo 4: Rotas
Não se esqueça de definir as rotas adequadas para os métodos do controlador. Por exemplo:

Route::post('/pdf/store', [PdfController::class, 'store']);
Route::get('/pdf/{id}', [PdfController::class, 'show']);
Enter fullscreen mode Exit fullscreen mode

Com isso, você criou as funcionalidades necessárias para salvar e recuperar PDFs no banco de dados PostgreSQL usando o Laravel. Lembre-se sempre de considerar as melhores práticas de segurança e desempenho ao lidar com o armazenamento de arquivos em um banco de dados.

Top comments (0)