File: //var/packages/SupportService/var/actions/SupportService/upload-debug-dat/multipart_data_encoder.py
import random
import string
import mimetypes
import typing
def generate_boundary() -> str:
return ''.join(random.choices(string.ascii_letters + string.digits, k=16))
def encode_multipart_data(fields: dict, files: typing.List[typing.Tuple[str, str]]) -> typing.Tuple[bytes, str]:
boundary = generate_boundary()
data = []
for key, value in fields.items():
data.append(f'--{boundary}'.encode('utf-8'))
data.append(f'Content-Disposition: form-data; name="{key}"\r\n'.encode('utf-8'))
data.append(f'{value}'.encode('utf-8'))
for field_name, file_path in files:
file_name = file_path.split('/')[-1]
file_type, _ = mimetypes.guess_type(file_path)
with open(file_path, 'rb') as file:
file_content = file.read()
data.append(f'--{boundary}'.encode('utf-8'))
data.append(f'Content-Disposition: form-data; name="{field_name}"; filename="{file_name}"'.encode('utf-8'))
data.append(f'Content-Type: {file_type}\r\n'.encode('utf-8'))
data.append(file_content)
data.append(f'--{boundary}--'.encode('utf-8'))
data.append(b'')
body = b'\r\n'.join(data)
content_type = 'multipart/form-data; boundary={}'.format(boundary)
return body, content_type