【问题标题】:Send a csv file to fastAPI and get a new file back将 csv 文件发送到 fastAPI 并取回一个新文件
【发布时间】:2020-07-06 04:40:36
【问题描述】:

我有这个非常简单的代码,它获取一个字典作为输入并返回一个字典:

app = FastAPI()

class User(BaseModel):
    user_name: dict


@app.post("/")
def main(user: User):
   ## some processing
   return user

我使用以下 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

现在,我想做一些类似的事情,但不是通过 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)

这允许我选择和加载一个文件:

但是当我点击发送时,我被重定向到:http://localhost:8000/uploadfiles/ 并得到以下错误:

{"detail":"Method Not Allowed"}

如何将文件发送到 API 并获取文件作为响应?

【问题讨论】:

  • 您是如何从文件中读取数据或上传文件的?请求将返回一个对象,您是如何将其转换为数据帧的?

标签: python pandas api fastapi


【解决方案1】:

我复制了你的代码,我得到了同样的错误。经过FastAPI documentation for requesting files之后,提到了

要接收上传的文件,首先安装python-multipart。

例如点安装python-multipart

这是因为上传的文件是作为“表单数据”发送的。

安装库python-multipart后,代码运行完美。

参考资料:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-30
    • 1970-01-01
    • 2019-10-11
    • 1970-01-01
    相关资源
    最近更新 更多