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

2023-11-22

如果您知道如何将文件发送到 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)

快速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}

JavaScript 代码

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

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

    let result = await response.json();

编辑: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)

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

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

编辑结束

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

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

NOTE

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐