Lui*_*uez 5 python api pandas fastapi
我有这个非常简单的代码,它获取字典作为输入并返回字典:
app = FastAPI()
class User(BaseModel):
user_name: dict
@app.post("/")
def main(user: User):
## some processing
return user
Run Code Online (Sandbox Code Playgroud)
我用以下 python 代码调用它:
import requests
import json
import pandas as pd
df = pd.read_csv("myfile.csv")
data = {}
data["user_name"] = df.to_dict()
headers = {'content-type': 'application/json'}
url = 'http://localhost:8000/'
resp = requests.post(url,data=json.dumps(data), headers=headers )
resp
Run Code Online (Sandbox Code Playgroud)
现在,我想做类似的事情,但我不想通过 python 请求发送数据,而是上传本地文件,将其发送到 API 并获取处理后的 .csv 文件。
现在我有以下代码来上传文件:
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)
但是当我单击发送时,我被重定向到:http://localhost:8000/uploadfiles/ 并收到以下错误:
{"detail":"Method Not Allowed"}
Run Code Online (Sandbox Code Playgroud)
如何将要处理的文件发送到 API 并获取文件作为响应?
我复制了你的代码,也遇到了同样的错误。在浏览了用于请求文件的 FastAPI 文档后,提到了
要接收上传的文件,请首先安装 python-multipart。
例如 pip install
python-multipart。这是因为上传的文件作为“表单数据”发送。
安装库后python-multipart,代码完美运行。
参考:
| 归档时间: |
|
| 查看次数: |
8984 次 |
| 最近记录: |