---
title: Uploads and Downloads
slug: web-view-sdk-uploads-and-downloads
createdAt: 2026-11-03T10:14:18.374Z
---

People can attach files and photos in the chat and download the conversation. The SDK uses the system's own pickers and sheets for both, so your app adds no code. Flutter and React Native apps get the behaviour of the platform they run on

## Attaching files

::::Tabs
:::Tab{title="iOS"}
Attaching a file opens the standard iOS picker, which can take a photo or video with the camera or pick one from the photo library. It needs the [Installation](docId\:sonmjcrRZMUEA1QI1eg5q) in your app's `Info.plist`
:::

:::Tab{title="Android"}
Attaching a file opens the system file picker, with several files at once when the chat allows it. When the chat accepts images, the picker also offers the camera. The camera app takes the photo and the SDK keeps it in its own folder in your app's cache, so the SDK needs no camera permission. If your app declares `android.permission.CAMERA`, the SDK asks for it before it offers the camera, because Android refuses the camera to an app that declares the permission without holding it. When the user denies it, the picker opens without the camera
:::

:::Tab{title="Flutter"}
The picker is the one of the platform the app runs on, see the iOS and Android tabs. On iOS it needs the [Installation](docId\:sonmjcrRZMUEA1QI1eg5q) in `ios/Runner/Info.plist`
:::

:::Tab{title="React Native"}
The picker is the one of the platform the app runs on, see the iOS and Android tabs. On iOS it needs the [Installation](docId\:sonmjcrRZMUEA1QI1eg5q) in your app's `Info.plist`
:::
::::

On iOS people can also save an image from the chat to their photo library, which needs `NSPhotoLibraryAddUsageDescription`

## Downloading the conversation

When someone downloads the conversation from the chat's menu, or with a bot button that exports their data, the SDK hands the file to the system

::::Tabs
:::Tab{title="iOS"}
The share sheet opens with the file, so the user can save it to Files, send it or cancel. The SDK removes its temporary copy when the sheet closes
:::

:::Tab{title="Android"}
The system save dialog opens with the file name filled in, and the user picks where to save it or cancels
:::

:::Tab{title="Flutter"}
The file goes to the share sheet on iOS and to the save dialog on Android, see the iOS and Android tabs
:::

:::Tab{title="React Native"}
The file goes to the share sheet on iOS and to the save dialog on Android, see the iOS and Android tabs
:::
::::

A download is accepted only while the chat is on screen, and only as an HTML, JSON or text file of at most 10 MiB. Script in the chat page can offer a file the same way, and nothing is saved or shared unless the user chooses to in the sheet or the dialog
