Передача загруженного файла в другой сервис с использованием запросов - PullRequest
0 голосов
/ 26 октября 2018

У меня есть веб-сервис Python flask, который принимает файл:

Заголовки:

Тип контента: multipart / formdata

Содержание:

"fileTest": ЗАГРУЖЕННЫЙ ФАЙЛ

Когда я передаю файл другому сервису, используя запросы lib, у меня возникает проблема, когда загруженный файл не передается.

Мой код:

files = {}
for form_file_param in request.files:
    fs = request.files[form_file_param]  # type: FileStorage
    files[form_file_param] = (fs.filename, fs.read())

req_headers = {
    "content-type": u "multipart/form-data; boundary=X-INSOMNIA-BOUNDARY",
}

r = requests.request(method='POST',
                     url=url,
                     headers=req_headers,
                     files=files)

Я обращаюсь в другую службу напрямую через почтальона, и она успешно работает. Я не могу понять, что я делаю неправильно в приведенном выше коде.

1 Ответ

0 голосов
/ 27 октября 2018

Вам необходимо выполнить запрос документа.

http://docs.python -requests.org / ен / ведущий / пользователь / Быстрый старт / # пост-а-многочастному-кодированной-файл

url = 'https://httpbin.org/post'
files = {'file': ('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})}
r = requests.post(url, files=files)
r.text

Изменить. после просмотра ответа OP проблема, вызванная заголовком - Content-Type.

Это специальный тип контента, который можно визуализировать как несколько подзапросов в одном большом запросе. Каждый из этих подзапросов (один элемент данных формы) имеет свой собственный набор заголовков. Здесь есть тип содержимого фактических данных. 1

Примечание: между fs и fs.read()

нет различий
#models.py line 149
if isinstance(fp, (str, bytes, bytearray)):
    fdata = fp
else:
    data = fp.read()
...