Я использую Python 3.8 на Windows 10, используя модуль requests
. Как следует из заголовка, я отправляю очень большие файлы на HTTP-сервер и хочу указать статус загрузки.
Я прочитал 10-20 потоков переполнения стека в этой топи c, прочитал статьи были разбросаны по inte rnet и погружены в исходный код проектов на GitHub, который я даже сейчас не могу вспомнить. Я пытался реализовать все, что я прочитал, но безрезультатно. Большинству информации, касающейся этой топи c, уже много лет, и с тех пор модуль requests
значительно улучшился - поэтому некоторая информация может быть устаревшей.
Проблема, с которой я сталкиваюсь - это отправка файла куски используя requests.Response.post('Some-URL', data=file_chunk, header=header)
. Если загружено 5 файловых блоков, то на сервере 5 отдельных файлов вместо 1 объединенного файла.
Чтобы обеспечить статус загрузки файла, я создал функцию генератора, аналогичную показанному в примере. ниже.
def read_in_chunks(file_object, chunk_size=1024):
"""Generator to read a file piece by piece.
Default chunk size: 1k."""
while True:
data = file_object.read(chunk_size)
if not data:
break
yield data
Затем я перебрал объект генератора, который был создан следующим образом:
with open('Some-File.zip', 'rb') as file_obj:
for file_chunk in read_in_chunks(file_obj):
requests.Response.post('Some-URL', data=file_chunk.encode('utf-8'), header=header)
Это НЕ работает. На сервере, на который загружаются чанки файлов, каждый чанк хранится на сервере в виде отдельного файла. Если файл разбит на 5 частей, то теперь есть 5 файлов. В документации requests
говорится, что вы можете передать функцию генератора параметру data=
, хотя я не могу заставить это работать. В документах также говорится, что для перебора данных используется Response.iter_content()
, но я не знаю, что именно это означает или как это реализовать. Документация кажется немного скудной по этой теме c.
Я также пытался использовать requests-toolbelt
, следуя этому коду здесь . Код в значительной степени идентичен примерам в документации. Я испытал ту же проблему, описанную выше. Я также создаю файл SHA-256 ha sh перед загрузкой, и ha sh будет меняться каждый раз, когда я выполняю сценарий до начала загрузки ... понятия не имею, поэтому я перестал использовать этот метод.
Существует вероятность того, что на стороне сервера загрузка файлов чанка не поддерживается, что является моей мыслью, если я реализую это правильно.