in python2/alibabacloud_tea_fileform/file_form.py [0:0]
def file_str(self, size):
# handle file object
form_str = b''
start_fmt = '--%s\r\nContent-Disposition: form-data; name="%s";'
content_fmt = b' filename="[%s]"\r\nContent-Type: [%s]\r\n\r\n[%s]'
if self.file_size_left:
for key in self.files_keys[:]:
if size <= 0:
break
file_field = self.files[key]
file_content = TC.to_bytes(file_field.content.read(size))
if self.file_size_left <= size:
form_str += b'[%s]\r\n'.replace(FMT, file_content, 1)
self.file_size_left = 0
size -= len(file_content)
self.files_keys.remove(key)
else:
form_str += file_content
self.file_size_left -= size
size -= len(file_content)
else:
for key in self.files_keys[:]:
if size <= 0:
break
file_field = self.files[key]
if isinstance(file_field.content, BytesIO):
file_size = len(file_field.content.getvalue())
else:
file_size = os.path.getsize(file_field.content.name)
self.file_size_left = file_size
file_content = TC.to_bytes(file_field.content.read(size))
# build form_str
start = start_fmt % (self.boundary, key)
content = content_fmt.replace(FMT, TC.to_bytes(file_field.filename), 1)\
.replace(FMT, TC.to_bytes(file_field.content_type), 1)\
.replace(FMT, file_content, 1)
if self.file_size_left < size:
form_str += b'[%s][%s]\r\n'.replace(FMT, TC.to_bytes(start), 1).replace(FMT, content, 1)
self.file_size_left = 0
size -= len(file_content)
self.files_keys.remove(key)
else:
form_str += b'[%s][%s]'.replace(FMT, TC.to_bytes(start), 1).replace(FMT, content, 1)
self.file_size_left -= size
size -= len(file_content)
return form_str