如何将文件(docx、doc、pdf 或 json)发送到 fastapi 并在没有 UI(即 HTML)的情况下对其进行预测?

use*_*_12 6 python python-3.x fastapi

如果您知道如何将文件发送到 FastAPI 服务器并在 /predict 端点中访问它以使用我的模型进行预测,请帮助我。

我已经使用 /predict 端点部署了模型并完成了uvicorn main:app部署,但唯一的输入是文档位于我的本地电脑中,那么如何将其发送到 FastAPI?

我已经浏览了 FastAPI 的文档,并在那里找到了这个示例代码,但挑战是该代码创建了一个用于上传文件的 UI,这不是我想要的。

from typing import Optional
from fastapi import FastAPI
from fastapi import FastAPI, File, UploadFile
from pydantic import BaseModel
from typing import List
from fastapi.responses import HTMLResponse


app = FastAPI()

class User(BaseModel):
    user_name: dict

@app.post("/files/")
async def create_files(files: List[bytes] = File(...)):
    return {"file_sizes": [len(file) for file in files]}


@app.post("/uploadfiles/")
async def create_upload_files(files: List[UploadFile] = File(...)):
    return {"filenames": [file.filename for file in files]}


@app.get("/")
async def main():
    content = """
<body>
<form action="/files/" enctype="multipart/form-data" method="post">
<input name="files" type="file" multiple>
<input type="submit">
</form>
</body>
    """
    return HTMLResponse(content=content)
Run Code Online (Sandbox Code Playgroud)

lsa*_*abi 10

快速API代码

这将是您的终点。

from fastapi import FastAPI, UploadFile, File


app = FastAPI()


@app.post("/file")
async def upload_file(file: UploadFile = File(...)):
    # Do here your stuff with the file
    return {"filename": file.filename}
Run Code Online (Sandbox Code Playgroud)

JavaScript 代码

这是您的 javascript 代码(假设您使用 javascript 上传文件)

form = new FormData();
form.append("file", myFile);
let response = await fetch('/file', {
      method: 'POST',
      body: form
    });

    let result = await response.json();
Run Code Online (Sandbox Code Playgroud)

编辑:Python文件上传

我正在使用httpx,但从技术上讲它应该与requests.

import httpx
# Create a dict with a key that has the same name as your file parameter and the file in binary form (the "b" in "rb")
f = {'file': open('foo.png', 'rb')}
r = httpx.post("your_url/file", files=f)
Run Code Online (Sandbox Code Playgroud)

httpx您可以在https://www.python-httpx.org/quickstart/#sending-multipart-file-uploads的官方文档中查看更多配置/示例。

再说一遍,我没有测试代码,因为我现在时间很紧。

编辑结束

请注意,文件的参数名称必须与用于发送文件的参数名称相匹配。

以防万一,我还有另一个关于如何使用 POSTMAN 测试它的答案。请参阅如何使用 postman 将文件发送到 fastapi 端点

笔记

我没有测试代码,因为我现在没有时间。以防万一,还有一个与我之前的答案相关的链接也有效(除非 FASTAPI 引入了重大更改)。