小能豆

如何在将文件上传到 FastAPI 时使用 HTML 复选框发送可选参数?

py

如何在将文件上传到 FastAPI 时使用 HTML 复选框发送可选参数?


阅读 18

收藏
2024-10-23

共1个答案

小能豆

在 FastAPI 中,可以使用 HTML 复选框来发送可选参数。以下是一个简单的示例,展示如何将文件与复选框一起上传。

1. FastAPI 服务器

首先,创建一个 FastAPI 服务器,处理文件上传和复选框参数。

from fastapi import FastAPI, File, UploadFile, Form
from fastapi.responses import HTMLResponse
from fastapi.middleware.cors import CORSMiddleware

app = FastAPI()

# 允许跨域请求(可选)
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

@app.get("/", response_class=HTMLResponse)
async def get_form():
    return """
    <form action="/upload" method="post" enctype="multipart/form-data">
        <input type="file" name="file" required>
        <br>
        <label>
            <input type="checkbox" name="optional_param" value="1">
            选择可选参数
        </label>
        <br>
        <input type="submit" value="上传">
    </form>
    """

@app.post("/upload")
async def upload_file(file: UploadFile = File(...), optional_param: str = Form(None)):
    content = await file.read()
    filename = file.filename

    optional_value = optional_param is not None  # 如果复选框被选中,optional_param 将为 "1"

    return {
        "filename": filename,
        "file_content": content.decode("utf-8"),  # 假设文件是文本文件
        "optional_param": optional_value,
    }

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="127.0.0.1", port=8000)

2. HTML 表单

上面的代码包含一个简单的 HTML 表单,其中有一个文件输入和一个复选框。当用户选择文件并提交表单时,/upload 端点会处理上传的文件和复选框的状态。

3. 说明

  • 复选框:在 HTML 表单中,复选框的 name 属性设置为 optional_param,其 value 设置为 "1"。当复选框被选中时,FastAPI 将其视为一个表单参数。
  • FileForm:使用 FileForm 从请求中提取文件和表单数据。在这里,file 参数获取上传的文件,而 optional_param 参数获取复选框的状态。
  • 可选参数:如果复选框未被选中,optional_param 的默认值为 None。可以根据这个值来判断复选框是否被选中。

4. 运行服务器

要运行 FastAPI 服务器,可以使用以下命令:

uvicorn your_script_name:app --reload

5. 测试

在浏览器中访问 http://127.0.0.1:8000/,选择一个文件并选择或不选择复选框,然后点击“上传”按钮。你将看到上传的文件名、文件内容和复选框的状态(是否被选中)的 JSON 响应。

2024-10-23