Upload de Arquivos no FastAPI com UploadFile resolve um problema recorrente em projetos Python: Receba uploads sem confiar em nome, extensão ou tipo informado pelo cliente. Este guia mostra o mecanismo, um exemplo executável e os limites que evitam uma implementação frágil.

Conceito e caso de uso

UploadFile usa um arquivo temporário com spooling e oferece uma interface assíncrona, sendo mais adequado que bytes para arquivos que podem crescer. Formulários de upload usam multipart/form-data.

Para revisar os fundamentos relacionados, consulte também o guia de APIs com FastAPI. A integração fica mais simples quando cada função recebe dependências e dados explicitamente, em vez de depender de estado global.

Exemplo prático

from typing import Annotated
from fastapi import FastAPI, File, HTTPException, UploadFile

app = FastAPI()

@app.post("/files")
async def upload(file: UploadFile):
    if file.content_type not in {"image/png", "image/jpeg"}:
        raise HTTPException(415, "Unsupported media type")
    data = await file.read(2_000_001)
    if len(data) > 2_000_000:
        raise HTTPException(413, "File too large")
    return {"name": file.filename, "size": len(data)}

Leia com limite, gere um nome interno e armazene fora de diretórios executáveis. O content_type é apenas uma pista; valide a assinatura real quando o formato importar.

Decisões importantes

A escolha correta depende do contrato público, do volume e do comportamento em caso de falha.

Considere como a solução se comporta sob concorrência, entradas vazias e falhas parciais. Documente qualquer limite que afete consumidores e mantenha nomes que expressem a intenção.

Erros comuns

O exemplo mínimo não substitui limites, tratamento de erros e observabilidade. Não use o nome original como caminho, não aceite extensão como prova do formato e não mantenha o arquivo inteiro em memória sem limite. Faça varredura quando o risco exigir.

Evite capturar exceções sem contexto ou retornar resultados parciais como se fossem completos. Uma falha explícita costuma ser mais segura que dados silenciosamente incorretos.

Como validar

Valide o comportamento, não apenas a linha feliz. Teste arquivo válido, vazio, acima do limite, nome com travessia de diretório e conteúdo diferente do tipo declarado. Confirme também a limpeza de temporários.

A documentação oficial, consultada em 28 de julho de 2026, detalha a API e deve ser a referência para mudanças futuras.