Atualizado: 14/06/2025

Este conteúdo é original e não foi gerado por inteligência artificial.

Enviando arquivos do servidor em FastAPI

Para enviar arquivos a partir de uma aplicação FastAPI, utiliza-se a classe FileResponse, que herda da classe Response.

Imagine que temos o seguinte projeto FastAPI:

.
├──public
│   └── index.html
├── main.py

O arquivo index.html é um arquivo HTML simples que contém o seguinte conteúdo:

<!DOCTYPE html>
<html>
  <head>
    <title>www.programicio.com</title>
    <meta charset="utf-8" />
  </head>
  <body>
    <h1>Hello www.programicio.com!</h1>
  </body>
</html>

Agora, no arquivo main.py, definimos o código para enviar esse arquivo ao cliente:

from fastapi import FastAPI
from fastapi.responses import FileResponse

app = FastAPI()

@app.get("/")
def root():
    return FileResponse("public/index.html")

# Alternativa
@app.get("/file", response_class=FileResponse)
def root_html():
    return "public/index.html"

O parâmetro obrigatório do construtor de FileResponse é o caminho do arquivo.

Ao enviar o arquivo, o navegador será capaz de interpretá-lo como um código HTML, exibindo assim a página no navegador.

Enviando arquivos HTML usando FastAPI

Por padrão, o navegador tenta interpretar e exibir qualquer arquivo que consiga, como arquivos de texto, imagens ou outros tipos de mídia. Caso o navegador não consiga interpretar o arquivo, ele será baixado automaticamente.

No entanto, pode ser necessário forçar o download de arquivos que normalmente seriam exibidos, como arquivos HTML. Para isso, podemos definir o parâmetro media_type como application/octet-stream. Além disso, o parâmetro filename permite especificar o nome do arquivo no momento do download.

Exemplo:

import mimetypes
from fastapi import FastAPI
from fastapi.responses import FileResponse

app = FastAPI()

@app.get("/")
def root():
    return FileResponse("public/index.html",
                        filename="mainpage.html",
                        media_type="application/octet-stream")

Neste exemplo, O uso do parâmetro media_type="application/octet-stream" instrui o navegador a tratar o arquivo como binário, forçando o download em vez de exibi-lo.

A propriedade filename é útil para personalizar o nome do arquivo no momento do download.

Baixando arquivos usando FastAPI

Documentação oficial:

Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com