Como realizar upload de arquivos em uma aplicação Java web?

O upload de arquivos em aplicações Java web pode ser feito com Spring Boot e a interface MultipartFile, permitindo armazenar imagens e documentos.

Como realizar upload de arquivos em uma aplicação Java web?

O upload de arquivos é um recurso essencial em muitas aplicações web, seja para armazenar imagens, documentos ou vídeos. No Spring Boot, isso pode ser feito facilmente com a interface MultipartFile.

1. Adicionando Configuração para Uploads

No application.properties, ative o suporte para arquivos grandes:

spring.servlet.multipart.enabled=true
spring.servlet.multipart.max-file-size=5MB
spring.servlet.multipart.max-request-size=10MB

Explicação:

  • Habilita suporte para uploads de arquivos.
  • Define um limite de 5MB por arquivo e 10MB por requisição.

2. Criando o Controller para Upload

Crie um Controller que recebe arquivos e os salva localmente:

import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

@RestController
@RequestMapping("/upload")
public class UploadController {
    private static final String UPLOAD_DIR = "uploads/";

    @PostMapping("/arquivo")
    public String uploadArquivo(@RequestParam("file") MultipartFile file) {
        try {
            Path caminho = Paths.get(UPLOAD_DIR + file.getOriginalFilename());
            Files.write(caminho, file.getBytes());
            return "Arquivo enviado com sucesso: " + file.getOriginalFilename();
        } catch (IOException e) {
            return "Erro ao enviar o arquivo: " + e.getMessage();
        }
    }
}

Explicação:

  • @PostMapping("/arquivo") recebe arquivos via POST.
  • MultipartFile file contém o arquivo enviado.
  • O arquivo é salvo no diretório uploads/.

3. Criando um Serviço para Uploads no Banco de Dados

Caso queira salvar arquivos no banco de dados, crie uma entidade JPA:

import jakarta.persistence.*;
import java.util.Arrays;

@Entity
@Table(name = "arquivos")
public class Arquivo {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String nome;

    @Lob
    private byte[] dados;

    // Getters e Setters
    public Long getId() { return id; }
    public void setId(Long id) { this.id = id; }
    public String getNome() { return nome; }
    public void setNome(String nome) { this.nome = nome; }
    public byte[] getDados() { return dados; }
    public void setDados(byte[] dados) { this.dados = dados; }
}

Agora, crie um repositório para manipular os arquivos:

import org.springframework.data.jpa.repository.JpaRepository;

public interface ArquivoRepository extends JpaRepository<Arquivo, Long> {
}

E um serviço para salvar arquivos no banco:

import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;

@Service
public class ArquivoService {
    private final ArquivoRepository arquivoRepository;

    public ArquivoService(ArquivoRepository arquivoRepository) {
        this.arquivoRepository = arquivoRepository;
    }

    public String salvarArquivo(MultipartFile file) throws IOException {
        Arquivo arquivo = new Arquivo();
        arquivo.setNome(file.getOriginalFilename());
        arquivo.setDados(file.getBytes());
        arquivoRepository.save(arquivo);
        return "Arquivo salvo no banco de dados: " + file.getOriginalFilename();
    }
}

4. Criando um Endpoint para Enviar e Recuperar Arquivos

Agora, altere o Controller para suportar uploads para o banco de dados:

@RestController
@RequestMapping("/upload")
public class UploadController {
    private final ArquivoService arquivoService;

    public UploadController(ArquivoService arquivoService) {
        this.arquivoService = arquivoService;
    }

    @PostMapping("/banco")
    public String uploadParaBanco(@RequestParam("file") MultipartFile file) {
        try {
            return arquivoService.salvarArquivo(file);
        } catch (IOException e) {
            return "Erro ao salvar o arquivo: " + e.getMessage();
        }
    }
}

5. Testando o Upload de Arquivos

  1. Enviar um arquivo via Postman:

    • Método: POST
    • URL: http://localhost:8080/upload/arquivo
    • Aba "Body" → Selecione form-data
    • Adicione um campo file e envie um arquivo
  2. Enviar um arquivo para o banco de dados:

    • Mesma configuração, alterando a URL para http://localhost:8080/upload/banco

Conclusão

O upload de arquivos em Spring Boot pode ser feito de forma simples:

  • Salvar no sistema de arquivos usando MultipartFile.
  • Armazenar no banco de dados usando JPA e @Lob.
  • Definir limites de tamanho no application.properties.

Escolha a abordagem que melhor se adapta ao seu projeto!

Com a crescente necessidade de armazenar arquivos em aplicações web, é essencial compreender como gerenciar uploads de forma eficiente. O Spring Boot oferece suporte integrado para MultipartFile, permitindo salvar arquivos no sistema de arquivos ou banco de dados. Além disso, o uso de serviços como AWS S3 pode ser uma alternativa escalável para armazenar grandes volumes de dados sem sobrecarregar o servidor da aplicação.

Algumas aplicações:

  • Upload de imagens de perfil em sistemas web
  • Armazenamento de documentos em bancos de dados
  • Integração com serviços de armazenamento na nuvem
  • Gerenciamento de arquivos em sistemas corporativos

Dicas para quem está começando

  • Defina um limite de tamanho para os arquivos
  • Evite armazenar arquivos grandes diretamente no banco de dados
  • Use serviços como AWS S3 para escalabilidade
  • Valide o tipo de arquivo antes de armazená-lo

Contribuições de Rodrigo Farias

Compartilhe este tutorial: Como realizar upload de arquivos em uma aplicação Java web

Compartilhe este tutorial

Continue aprendendo:

Como configurar uma conexão com banco de dados no Spring Boot

No Spring Boot, configurar uma conexão com banco de dados é simples com Spring Data JPA e suporte para bancos como MySQL e PostgreSQL.

Tutorial anterior

Como configurar e usar Thymeleaf no Spring Boot

Thymeleaf é um motor de templates para Spring Boot que permite renderizar páginas HTML dinâmicas diretamente do backend.

Próximo tutorial