Como criar um sistema de upload de arquivos no laravel

Para criar um sistema de upload de arquivos no Laravel, você pode seguir um processo simples. O Laravel já possui suporte embutido para upload de arquivos, o que facilita bastante o desenvolvimento dessa funcionalidade. Aqui está um passo a passo básico para configurar e implementar um sistema de upload de arquivos em Laravel:

1. Configuração Inicial

Se você ainda não tem um projeto Laravel, inicie criando um novo projeto. Você pode fazer isso com o Composer:

composer create-project --prefer-dist laravel/laravel uploadFilesApp

2. Configurar o .env para o Armazenamento de Arquivos

O Laravel oferece diferentes drivers para armazenamento de arquivos (local, S3, etc.), e o driver local é o padrão. Para garantir que o sistema use o local, verifique se no arquivo .env existe a seguinte configuração:

FILESYSTEM_DRIVER=local

3. Criar um Controller para Gerenciar o Upload

Crie um controlador para gerenciar o upload de arquivos. Para isso, você pode usar o comando Artisan para gerar um controlador:

php artisan make:controller FileUploadController

No controlador, você pode criar um método para tratar o upload do arquivo. Abra o controlador recém-criado (app/Http/Controllers/FileUploadController.php) e adicione o seguinte código:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;

class FileUploadController extends Controller
{
    public function showForm()
    {
        return view('upload.form');
    }

    public function upload(Request $request)
    {
        // Validação do arquivo
        $request->validate([
            'file' => 'required|file|mimes:jpg,png,pdf,docx|max:2048',
        ]);

        // Verificar se o arquivo foi carregado com sucesso
        if ($request->hasFile('file') && $request->file('file')->isValid()) {
            // Pegar o arquivo
            $file = $request->file('file');

            // Definir o nome do arquivo
            $fileName = time() . '_' . $file->getClientOriginalName();

            // Salvar o arquivo no disco 'local'
            $path = $file->storeAs('uploads', $fileName, 'local');

            // Retornar o caminho do arquivo ou qualquer outra informação
            return back()->with('success', 'Arquivo enviado com sucesso!')->with('path', $path);
        }

        return back()->withErrors('Erro ao enviar arquivo.');
    }
}

4. Criar as Rotas

Agora, adicione as rotas no arquivo routes/web.php para que os usuários possam acessar o formulário e fazer o upload:

use App\Http\Controllers\FileUploadController;

Route::get('/upload', [FileUploadController::class, 'showForm']);
Route::post('/upload', [FileUploadController::class, 'upload']);

5. Criar o Formulário de Upload

Crie uma view simples para o formulário de upload de arquivo. No diretório resources/views, crie o arquivo upload/form.blade.php com o seguinte conteúdo:

<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Upload de Arquivo</title>
</head>
<body>
    <h1>Formulário de Upload</h1>

    @if(session('success'))
        <p style="color: green;">{{ session('success') }}</p>
        <p>Arquivo salvo em: {{ session('path') }}</p>
    @endif

    @if($errors->any())
        <ul>
            @foreach($errors->all() as $error)
                <li style="color: red;">{{ $error }}</li>
            @endforeach
        </ul>
    @endif

    <form action="/upload" method="POST" enctype="multipart/form-data">
        @csrf
        <label for="file">Escolha um arquivo:</label>
        <input type="file" name="file" id="file" required>
        <button type="submit">Enviar</button>
    </form>
</body>
</html>

6. Testar o Sistema de Upload

Agora, basta rodar o servidor local do Laravel e testar o sistema de upload. No terminal, digite:

php artisan serve

Depois, acesse no navegador:

http://localhost:8000/upload

Você verá o formulário de upload. Ao escolher um arquivo e clicar em “Enviar”, o arquivo será carregado e salvo no diretório storage/app/uploads.

7. Acessar o Arquivo Carregado

Por padrão, o Laravel salva os arquivos dentro da pasta storage/app/. Para tornar esses arquivos acessíveis publicamente, você pode criar um link simbólico para a pasta storage usando o comando:

php artisan storage:link

Isso cria um link simbólico da pasta storage/app/public para public/storage, permitindo o acesso direto aos arquivos.

Então, se você quiser armazenar os arquivos em public, altere a linha onde você salva o arquivo para o seguinte:

$path = $file->storeAs('public/uploads', $fileName);

Agora, o arquivo será armazenado em storage/app/public/uploads, e você poderá acessá-lo através da URL:

http://localhost:8000/storage/uploads/nome_do_arquivo.extensao

8. (Opcional) Configurar Permissões

Certifique-se de que as permissões da pasta storage estão corretas, pois o Laravel precisa de permissão para gravar arquivos lá. No Linux, você pode rodar os seguintes comandos:

chmod -R 775 storage
chmod -R 775 bootstrap/cache

Considerações Finais

  • Validação de Arquivo: No exemplo acima, você pode personalizar a validação dos arquivos conforme necessário (como tipo de arquivo, tamanho, etc.).
  • Segurança: É importante validar e sanitizar os arquivos para evitar vulnerabilidades, como execução de código malicioso.
  • Armazenamento Externo: Se você precisar usar sistemas de armazenamento como Amazon S3 ou outros, o Laravel também oferece suporte fácil a essas opções, bastando configurar o .env adequadamente.

Com isso, você tem um sistema simples de upload de arquivos no Laravel!

Posts Similares