docs: def _do_fileupload(self, file_param_name, value, _command=None, _file_is_optional=False, **kwargs):
          """
          :param file_param_name: For what field the file should be uploaded.
          :type  file_param_name: str
  
          :param value: File to send. You can either pass a file_id as String to resend a file
                        file that is already on the Telegram servers, or upload a new file,
                        specifying the file path as :class:`pytgbot.api_types.sendable.files.InputFile`.
                        If `_file_is_optional` is set to `True`, it can also be set to `None`.
          :type  value: pytgbot.api_types.sendable.files.InputFile | str | None
  
          :param _command: Overwrite the command to be send.
                           Default is to convert `file_param_name` to camel case (`"voice_note"` -> `"sendVoiceNote"`)
          :type  _command: str|None
  
          :param _file_is_optional: If the file (`value`) is allowed to be None.
          :type  _file_is_optional: bool
  
          :param kwargs: will get json encoded.
  
          :return: The json response from the server, or, if `self.return_python_objects` is `True`, a parsed return type.
          :rtype: DictObject.DictObject | pytgbot.api_types.receivable.Receivable
  
          :raises TgApiTypeError, TgApiParseException, TgApiServerException: Everything from :meth:`Bot.do`, and :class:`TgApiTypeError`
          """
          from .api_types.sendable.files import InputFile
          from luckydonaldUtils.encoding import unicode_type
          from luckydonaldUtils.encoding import to_native as n
  
          if value is None and _file_is_optional:
              # Is None but set optional, so do nothing.
              pass
          elif isinstance(value, str):
              kwargs[file_param_name] = str(value)
          elif isinstance(value, unicode_type):
              kwargs[file_param_name] = n(value)
          elif isinstance(value, InputFile):
              files = value.get_request_files(file_param_name)
              if "files" in kwargs and kwargs["files"]:
                  # already are some files there, merge them.
                  assert isinstance(kwargs["files"], dict), \
                      'The files should be of type dict, but are of type {}.'.format(type(kwargs["files"]))
                  for key in files.keys():
                      assert key not in kwargs["files"], '{key} would be overwritten!'
                      kwargs["files"][key] = files[key]
                  # end for
              else:
                  # no files so far
                  kwargs["files"] = files
              # end if
          else:
              raise TgApiTypeError("Parameter {key} is not type (str, {text_type}, {input_file_type}), but type {type}".format(
                  key=file_param_name, type=type(value), input_file_type=InputFile, text_type=unicode_type))
          # end if
          if not _command:
              # command as camelCase  # "voice_note" -> "sendVoiceNote"  # https://stackoverflow.com/a/10984923/3423324
              command = re.sub(r'(?!^)_([a-zA-Z])', lambda m: m.group(1).upper(), "send_" + file_param_name)
          else:
              command = _command
          # end def
          return self.do(command, **kwargs)