Atualizado: 10/11/2024

Enviando arquivos do servidor - 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.

Exxemplo:

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
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