POST-запрос для файла .txt - PullRequest
1 голос
/ 01 марта 2020

Я не могу написать функцию, которая может получить файл .txt через POST-запрос.

У меня есть файл .txt, который содержит фразу: Hello World!

на стороне сервера :

from fastapi import FastAPI, File
from starlette.requests import Request
import io

app = FastAPI()
@app.post("/post_text_file")
def text_function(request: Request,
            file: bytes = File(...)):
    text = open(io.BytesIO(file), "r").read()
    return text  # Hello World!

на стороне клиента:

import requests

url = 'http://localhost:8000/post_text_file'
r = requests.post(url,data=open('Hello World.txt'))

после запуска команды uvicorn main: app и запуска кода на стороне клиента я получаю следующий ответ:

На на стороне клиента: {'detail': 'Произошла ошибка при разборе тела'}

На стороне сервера: "POST / post_text_file HTTP / 1.1" 400 Bad Request

1 Ответ

2 голосов
/ 01 марта 2020

Для arguments.post существует параметр files, который можно использовать для отправки файлов следующим образом:

import requests

url = "http://localhost:8000/post_text_file"
fin = open('Hello World.txt', 'rb')
files = {'file': fin}
try:
    r = requests.post(url, files=files)
finally:
    fin.close()

И обычно файл, отправленный с вашим запросом, доступен с request.files как словарь загруженных файлов.

...