Я написал небольшой CLI в python для обработки нескольких загрузок на сервер flask. При тестировании процесса я обнаружил, что загружаемый файл размером 25 МБ создает файл размером 42 МБ на сервере после завершения ?! Каждый чанк почти удваивается, когда достигает сервера.
Код клиента CLI:
from requests_toolbelt.multipart.encoder import MultipartEncoder
#Open file
with open(self.file_path, 'rb') as file:
start = 0
chunk_count = math.ceil(self.file_size / self.max_byte_length)
print("Number of upload parts:", chunk_count)
with alive_bar(chunk_count) as bar:
#for i in range(chunk_count):
while self.i < chunk_count:
if self.i >= chunk_count-1:
is_last_chunk = True
end = min(self.file_size, start + self.max_byte_length)
file.seek(start)
data = file.read(end)
start = end
print("Chunk size : {}".format(str(sys.getsizeof(data))))
multipart_data = MultipartEncoder(
fields={
# a file upload field
'data': data,
# plain text fields
'chunk_index': str(self.i+1),
'chunk_size' : str(sys.getsizeof(data)),
'chunk_count' : str(chunk_count),
'file_size' : str(self.file_size),
'resource_friendly_name': friendly_name,
'upload_id': str(self.upload_id)
}
)
# Set headers
headers = {
'Content-Type': multipart_data.content_type
}
#Make request to server
try:
response = requests.request("POST", self.api_url, headers=headers, data=multipart_data)
Размеры чанков, зарегистрированные клиентом CLI, следующие:
on 0: Chunk size : 5242913
on 1: Chunk size : 10485793
on 2: Chunk size : 14685268
on 3: Chunk size : 9442388
on 4: Chunk size : 4199508
Размеры чанков, регистрируемых сервером, следующие:
on 0: Chunk size : 10466998
on 1: Chunk size : 41801848
on 2: Chunk size : 29323520
on 3: Chunk size : 18865242
on 4: Chunk size : 8388424
Понятия не имею, почему размер каждого чанка так резко увеличивается?