загрузка больших файлов в торнадо с помощью @stream_request_body - PullRequest
0 голосов
/ 23 января 2020

@ stream_request_body class StreamHandler (RequestHandler): def post (self): self.temp_file.close ()

def prepare(self):

     max_buffer_size = 4 * 1024**3 # 4GB
     self.request.connection.set_max_body_size(max_buffer_size)
     self.temp_file = open("test.txt","w")


def data_received(self, chunk):
    self.temp_file.write(chunk)

С помощью приведенного выше кода я могу загрузить файл, но в виде необработанных данных, как показано ниже

----------------------------- 6552719992117258671800152707 Содержание-Расположение: форма-данные; name = "dest"

csv ----------------------------- 6552719992117258671800152707 Content-Disposition: form-data; name = "carrier"

пропускная способность ----------------------------- 6552719992117258671800152707 Content-Disposition: form-data; Name = "file1"; filename = "test.csv" Content-Type: text / csv

И содержимое загруженного файла следует здесь.

Как получить параметры запроса, проанализированные из файла, и отделить данные файла загружен? Есть ли другой способ загрузить большие файлы (около 2 ГБ) в торнадо

1 Ответ

0 голосов
/ 23 января 2020

Это составной протокол, используемый формами HTML. В настоящее время Tornado может анализировать это, только если видит все данные одновременно, а не в потоковой загрузке. Есть сторонняя библиотека, которая должна справиться с этим: https://github.com/siddhantgoel/streaming-form-data. См. Эту проблему для получения дополнительной информации: https://github.com/tornadoweb/tornado/issues/1842

Если вы управляете клиентом, может быть проще использовать обычный HTTP PUT вместо протокола HTML multipart form. Это не требует специальной обработки на стороне сервера

...