使用 Python 发送和接收文件:FastAPI 和请求
Send and receive file using Python: FastAPI and requests
我正在尝试使用请求将文件上传到 FastAPI 服务器。
我已将问题归结为最简单的组成部分。
客户端使用请求:
import requests
files = {'file': ('foo.txt', open('./foo.txt', 'rb'))}
response = requests.post('http://127.0.0.1:8000/file', files=files)
print(response)
print(response.json())
使用fastapi的服务器:
from fastapi import FastAPI, File, UploadFile
import uvicorn
app = FastAPI()
@app.post('/file')
def _file_upload(my_file: UploadFile = File(...)):
print(my_file)
if __name__ == "__main__":
uvicorn.run("main:app", host="0.0.0.0", port=8000, log_level="debug")
已安装的软件包:
- fastapi
- python-多部分
- uvicorn
- 请求
客户端输出:
<响应[422]>
{'detail': [{'loc': ['query', 'my_file'], 'msg': 'field required', 'type': 'value_error.missing'}]}
服务器输出:
信息:127.0.0.1:37520 - “POST /file HTTP/1.1” 422 无法处理的实体
我在这里错过了什么?
从您的请求中删除 'foo.txt'。
它应该看起来像
files = {'file': open('./foo.txt', 'rb')}
FastAPI 需要 my_file
字段中的文件,而您正在将其发送到 file
字段.
应该是
import requests
url = "http://127.0.0.1:8000/file"
<b>files = {'my_file': open('README.md', 'rb')}</b>
res = requests.post(url, files=files)
此外,您不需要 元组 来管理上传文件(我们正在处理简单的上传,对吧?)
我正在尝试使用请求将文件上传到 FastAPI 服务器。
我已将问题归结为最简单的组成部分。
客户端使用请求:
import requests
files = {'file': ('foo.txt', open('./foo.txt', 'rb'))}
response = requests.post('http://127.0.0.1:8000/file', files=files)
print(response)
print(response.json())
使用fastapi的服务器:
from fastapi import FastAPI, File, UploadFile
import uvicorn
app = FastAPI()
@app.post('/file')
def _file_upload(my_file: UploadFile = File(...)):
print(my_file)
if __name__ == "__main__":
uvicorn.run("main:app", host="0.0.0.0", port=8000, log_level="debug")
已安装的软件包:
- fastapi
- python-多部分
- uvicorn
- 请求
客户端输出: <响应[422]> {'detail': [{'loc': ['query', 'my_file'], 'msg': 'field required', 'type': 'value_error.missing'}]}
服务器输出: 信息:127.0.0.1:37520 - “POST /file HTTP/1.1” 422 无法处理的实体
我在这里错过了什么?
从您的请求中删除 'foo.txt'。
它应该看起来像
files = {'file': open('./foo.txt', 'rb')}
FastAPI 需要 my_file
字段中的文件,而您正在将其发送到 file
字段.
应该是
import requests
url = "http://127.0.0.1:8000/file"
<b>files = {'my_file': open('README.md', 'rb')}</b>
res = requests.post(url, files=files)
此外,您不需要 元组 来管理上传文件(我们正在处理简单的上传,对吧?)