Skip to content
Back to top
View this page

# InputFile

class telegram.InputFile(obj, filename=None, attach=False, read_file_handle=True)

  Bases: `object`

  This object represents a Telegram InputFile.

  Use In

  - `telegram.Bot.send_animation()`

  - `telegram.Bot.send_audio()`

  - `telegram.Bot.send_document()`

  - `telegram.Bot.send_photo()`

  - `telegram.Bot.send_sticker()`

  - `telegram.Bot.send_video_note()`

  - `telegram.Bot.send_video()`

  - `telegram.Bot.send_voice()`

  - `telegram.Bot.set_chat_photo()`

  - `telegram.Bot.set_sticker_set_thumbnail()`

  - `telegram.Bot.set_webhook()`

  - `telegram.Bot.upload_sticker_file()`

  Available In

  - `telegram.InputMedia.media`

  - `telegram.InputMediaAnimation.media`

  - `telegram.InputMediaAnimation.thumbnail`

  - `telegram.InputMediaAudio.media`

  - `telegram.InputMediaAudio.thumbnail`

  - `telegram.InputMediaDocument.media`

  - `telegram.InputMediaDocument.thumbnail`

  - `telegram.InputMediaPhoto.media`

  - `telegram.InputMediaVideo.cover`

  - `telegram.InputMediaVideo.media`

  - `telegram.InputMediaVideo.thumbnail`

  - `telegram.InputPaidMedia.media`

  - `telegram.InputPaidMediaPhoto.media`

  - `telegram.InputPaidMediaVideo.cover`

  - `telegram.InputPaidMediaVideo.media`

  - `telegram.InputPaidMediaVideo.thumbnail`

  - `telegram.InputProfilePhotoAnimated.animation`

  - `telegram.InputProfilePhotoStatic.photo`

  - `telegram.InputSticker.sticker`

  - `telegram.InputStoryContentPhoto.photo`

  - `telegram.InputStoryContentVideo.video`

  Changed in version 20.0:

  - The former attribute `attach` was renamed to `attach_name`.

  - Method `is_image` was removed. If you pass `bytes` to `obj` and would like to have the mime type automatically guessed, please pass `filename` in addition.

  Parameters:

    - obj (file object | `bytes` | `str`) –

      An open file descriptor or the files content as bytes or string.

      Note

      If `obj` is a string, it will be encoded as bytes via `obj.encode('utf-8')`.

      Changed in version 20.0: Accept string input.

    - filename (`str`, optional) – Filename for this InputFile.

    - attach (`bool`, optional) – Pass `True` if the parameter this file belongs to in the request to Telegram should point to the multipart data via an `attach://` URI. Defaults to False.

    - read_file_handle (`bool`, optional) –

      If `True` and `obj` is a file handle, the data will be read from the file handle on initialization of this object. If `False`, the file handle will be passed on to the `networking backend` which will have to handle the reading. Defaults to `True`.

      Tip

      If you upload extremely large files, you may want to set this to `False` to avoid reading the complete file into memory. Additionally, this may be supported better by the networking backend (in particular it is handled better by the default `HTTPXRequest`).

      Important

      If you set this to `False`, you have to ensure that the file handle is still open when the request is made. In particular, the following snippet can not work as expected.

          with open('file.txt', 'rb') as file:
              input_file = InputFile(file, read_file_handle=False)

          # here the file handle is already closed and the upload will fail
          await bot.send_document(chat_id, input_file)

      Added in version 21.5.

  input_file_content

    The binary content of the file to send.

    Type:

      `bytes` | `IO`

  attach_name

    Optional. If present, the parameter this file belongs to in the request to Telegram should point to the multipart data via a an URI of the form `attach://<attach_name>` URI.

    Type:

      `str`

  filename

    Filename for the file to be sent.

    Type:

      `str`

  mimetype

    The mimetype inferred from the file to be sent.

    Type:

      `str`

  property attach_uri

    URI to insert into the JSON data for uploading the file. Returns `None`, if `attach_name` is `None`.

  property field_tuple

    Field tuple representing the contents of the file for upload to the Telegram servers.

    Changed in version 21.5: Content may now be a file handle.

    Return type:

      tuple[`str`, `bytes` | `IO`, `str`]