docs: def _prepare_files(self, encoding):
          """ private function to prepare content for paramType=form with File
          """
          content_type = 'multipart/form-data'
          if self.__op.consumes and content_type not in self.__op.consumes:
              raise errs.SchemaError('content type {0} does not present in {1}'.format(content_type, self.__op.consumes))
  
          boundary = uuid4().hex
          content_type += '; boundary={0}'
          content_type = content_type.format(boundary)
  
          # init stream
          body = io.BytesIO()
          w = codecs.getwriter(encoding)
  
          def append(name, obj):
              body.write(six.b('--{0}\r\n'.format(boundary)))
  
              # header
              w(body).write('Content-Disposition: form-data; name="{0}"; filename="{1}"'.format(name, obj.filename))
              body.write(six.b('\r\n'))
              if 'Content-Type' in obj.header:
                  w(body).write('Content-Type: {0}'.format(obj.header['Content-Type']))
                  body.write(six.b('\r\n'))
              if 'Content-Transfer-Encoding' in obj.header:
                  w(body).write('Content-Transfer-Encoding: {0}'.format(obj.header['Content-Transfer-Encoding']))
                  body.write(six.b('\r\n'))
              body.write(six.b('\r\n'))
  
              # body
              if not obj.data:
                  with open(obj.filename, 'rb') as f:
                      body.write(f.read())
              else:
                  data = obj.data.read()
                  if isinstance(data, six.text_type):
                      w(body).write(data)
                  else:
                      body.write(data)
  
              body.write(six.b('\r\n'))
  
          for k, v in self.__p['formData']:
              body.write(six.b('--{0}\r\n'.format(boundary)))
  
              w(body).write('Content-Disposition: form-data; name="{0}"'.format(k))
              body.write(six.b('\r\n'))
              body.write(six.b('\r\n'))
  
              w(body).write(v)
  
              body.write(six.b('\r\n'))
  
          # begin of file section
          for k, v in six.iteritems(self.__p['file']):
              if isinstance(v, list):
                  for vv in v:
                      append(k, vv)
              else:
                  append(k, v)
  
          # final boundary
          body.write(six.b('--{0}--\r\n'.format(boundary)))
  
          return content_type, body.getvalue()