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.