> ## Documentation Index
> Fetch the complete documentation index at: https://mintlify.com/marimo-team/marimo/llms.txt
> Use this file to discover all available pages before exploring further.

# File

> File upload input

# mo.ui.file

Create a file upload input for uploading files.

## Signature

```python theme={null}
mo.ui.file(
    filetypes: Sequence[str] | None = None,
    multiple: bool = False,
    kind: Literal["button", "area"] = "button",
    *,
    max_size: int = 100_000_000,
    label: str = "",
    on_change: Callable[[Sequence[FileUploadResults]], None] | None = None
)
```

## Parameters

<ParamField path="filetypes" type="Sequence[str]">
  Accepted file extensions (e.g., \[".pdf", ".jpg"])
</ParamField>

<ParamField path="multiple" type="bool" default="False">
  Allow multiple file uploads
</ParamField>

<ParamField path="kind" type="'button' | 'area'" default="'button'">
  Upload interface style
</ParamField>

<ParamField path="max_size" type="int" default="100_000_000">
  Maximum file size in bytes (default 100MB)
</ParamField>

<ParamField path="label" type="str" default="''">
  Markdown label for the file input
</ParamField>

## Examples

```python theme={null}
import marimo as mo

# Basic file upload
upload = mo.ui.file(label="**Upload a file:**")
upload
```

```python theme={null}
# Specific file types
image_upload = mo.ui.file(
    filetypes=[".jpg", ".png", ".gif"],
    kind="area",
    label="Upload an image"
)
```

```python theme={null}
# Multiple files
multi_upload = mo.ui.file(
    multiple=True,
    max_size=10_000_000,  # 10MB
    label="Upload multiple files"
)
```

```python theme={null}
# Access uploaded file data
if upload.value:
    file = upload.value[0]
    mo.md(f"""
    **Uploaded:**
    - Name: {file.name}
    - Size: {len(file.contents)} bytes
    - Type: {file.type}
    """)
```

## FileUploadResults

Each uploaded file has:

* `name`: Filename
* `contents`: File contents as bytes
* `type`: MIME type
