def file_str()

in python/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 = file_field.content.read(size)
                if isinstance(file_content, str):
                    file_content = file_content.encode('utf-8')

                if self.file_size_left <= size:
                    form_str += b'%s\r\n' % file_content
                    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]

                file_size = _length(file_field.content)
                self.file_size_left = file_size
                file_content = file_field.content.read(size)
                if isinstance(file_content, str):
                    file_content = file_content.encode('utf-8')

                # build form_str
                start = start_fmt % (self.boundary, key)
                content = content_fmt % (
                    file_field.filename.encode('utf-8'),
                    file_field.content_type.encode('utf-8'),
                    file_content
                )
                if self.file_size_left < size:
                    form_str += b'%s%s\r\n' % (start.encode('utf-8'), content)
                    self.file_size_left = 0
                    size -= len(file_content)
                    self.files_keys.remove(key)
                else:
                    form_str += b'%s%s' % (start.encode('utf-8'), content)
                    self.file_size_left -= size
                    size -= len(file_content)

        return form_str