Iniciante Arquitetura de Sistemas

Como funciona um upload

Upload é enviar um arquivo do seu computador para um servidor. Parece simples, mas envolve formatar os dados, transmitir pela rede e decidir onde guardar. Vamos ver o caminho.

O formato: multipart/form-data

Para enviar arquivos, o navegador usa o tipo multipart/form-data. Ele divide a requisição em partes: campos de texto e o conteúdo do arquivo, separados por uma fronteira (boundary).

POST /upload HTTP/1.1
Content-Type: multipart/form-data; boundary=----abc

------abc
Content-Disposition: form-data; name="titulo"

Minha foto
------abc
Content-Disposition: form-data; name="arquivo"; filename="foto.jpg"
Content-Type: image/jpeg

(bytes binários da imagem)
------abc--

Cada parte traz seu nome e, no caso do arquivo, o nome original e o tipo.

Streaming do arquivo

Arquivos grandes não cabem na memória de uma vez. O servidor lê o arquivo em pedaços (stream) e vai gravando aos poucos:

Cliente envia: [pedaço][pedaço][pedaço]...
Servidor:      lê pedaço -> grava -> lê pedaço -> grava

Assim você sobe um vídeo de 1 GB sem estourar a memória do servidor.

Limites

Servidores impõem limites para se proteger:

  • Tamanho máximo do arquivo.
  • Tipos permitidos (validar a extensão e o conteúdo real).
  • Tempo máximo de upload.

Quando o arquivo passa do limite, o servidor responde com erro:

HTTP/1.1 413 Payload Too Large

Armazenamento

Depois de receber, o servidor decide onde guardar:

  • Disco local: simples, mas não escala entre várias máquinas.
  • Armazenamento de objetos (ex.: S3): escalável e durável, comum em produção.
  • Banco de dados: possível para arquivos pequenos, mas costuma ser má ideia para grandes.

Boa prática: guardar o arquivo num storage e salvar só o caminho/URL no banco.

Segurança

  • Nunca confie no nome ou tipo enviado: valide o conteúdo de verdade.
  • Renomeie o arquivo para evitar sobrescrita e nomes maliciosos.
  • Não execute o que foi enviado.

Resumo do fluxo

Formulário -> multipart -> rede -> servidor lê em stream
-> valida (tamanho, tipo) -> grava no storage -> salva URL no banco

Com streaming, limites e validação, o upload fica eficiente e seguro.