如何使用 FastAPI return 和下载 Excel 文件?

How to return and download Excel file using FastAPI?

如何使用 FastAPI return 一个 excel 文件(版本:Office365)?该文档看起来非常简单。但是,我不知道 media_type 有什么用。这是我的代码:

import os
from fastapi import FastAPI
from fastapi.responses import FileResponse
from pydantic import BaseModel
from typing import Optional

excel_file_path = r"C:\Users\some_path\the_excel_file.xlsx"

app = FastAPI()

class ExcelRequestInfo(BaseModel):
    client_id: str


@app.post("/post_for_excel_file/")
async def serve_excel(item: ExcelRequestInfo):
    # (Generate excel using item.)
    # For now, return a fixed excel.
    return FileResponse(
        path=excel_file_path,

        # Swagger UI says 'cannot render, look at console', but console shows nothing.
        media_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'

        # Swagger renders funny chars with this argument:
        # 'application/vnd.ms-excel'
    )

假设我没看错,如何下载文件?我可以使用 FastAPI 生成的 Swagger UI 查看 sheet 吗?或者,卷曲?理想情况下,我希望能够下载和查看 Excel.

中的文件

您可以设置 Content-Disposition header using the attachment parameter, indicating to the browser that the file should be downloaded, as described in the answers here and here。 Swagger UI 将在您执行请求后立即提供 Download file link 供您下载文件。

headers = {'Content-Disposition': 'attachment; filename="Book.xlsx"'}
return FileResponse(excel_file_path, headers=headers)

要在浏览器中查看文件,可以使用 Content-Disposition header 中的 inline 参数。但是,应该在 FileResponse (for Excel files see here) 中设置正确的 media_type,并且 .xlsx(或 .xls)必须是浏览器已知的文件扩展名。