> For the complete documentation index, see [llms.txt](https://docs.dapta.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.dapta.ai/dforms/results/uploaded-files.md).

# Uploaded files

Open what people uploaded without leaving the response table: which file types preview inside dForms, which ones download straight away, and why every link is minted at the moment you click it.

When a form has a [File upload](/dforms/builder/question-types/file-upload.md) question, that question's column in **Submissions** holds the file the respondent sent you. This page explains how to read it, open it and keep it.

***

**Step 1:** Find the column. A file answer shows a paperclip and the respondent's own filename, underlined to say it is clickable. Nothing else from the file is shown, and the column reads like any other.

<figure><img src="https://3835013762-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCy5rSNtQmtqYCGzJlNEB%2Fuploads%2Fgit-blob-66d6129bff3a88fe4149cdf93dcc21e2dee94f21%2Fforms-file-preview-01-cell.png?alt=media" alt="The Submissions table with a file answer highlighted, showing a paperclip and the filename resume-jane-doe.pdf"><figcaption><p>The name is the one the respondent's own computer used. Rows with no file are simply blank.</p></figcaption></figure>

The same file shows in the response panel too: click the row, and the file question's card holds the same clickable name. See [Submissions](/dforms/results/submissions.md). In [Summary](/dforms/results/summary.md), a **File upload** question only shows how many files came in, under **Files uploaded**.

***

**Step 2:** Click the name. What happens depends on the kind of file.

| Kind                                                                    | What the click does                                                           |
| ----------------------------------------------------------------------- | ----------------------------------------------------------------------------- |
| **Images** (`png`, `jpg`, `gif`, `webp`, `avif`, `bmp`)                 | Opens in a dialog, drawn at full size.                                        |
| **PDF**                                                                 | Opens in a dialog with your browser's own PDF reader: pages, zoom and search. |
| **Plain text** (`txt`, `csv`, `tsv`, `md`, `log`, `json`, `xml`, `yml`) | Opens in a dialog as text.                                                    |
| **Word** (`docx`)                                                       | Opens in a dialog as an approximate view of the document.                     |
| **Anything else**                                                       | Downloads straight away, with no dialog.                                      |

<figure><img src="https://3835013762-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCy5rSNtQmtqYCGzJlNEB%2Fuploads%2Fgit-blob-995b07e3bbfe5f5e54bb70f3bf192801ebeadc4c%2Fforms-file-preview-02-image.png?alt=media" alt="The preview dialog showing an uploaded image, with the file size on the left and the Close and Download buttons on the right"><figcaption><p>The dialog is titled with the filename. Its size sits bottom left, <strong>Close</strong> and <strong>Download</strong> bottom right.</p></figcaption></figure>

Spreadsheets, archives and older `.doc` files fall into the last row. There is no dialog for them because no browser can draw them, and a dialog whose only content is a download button is a click of ceremony in front of the thing you already asked for.

***

**Step 3:** Read the file. A PDF gets your browser's full reader inside the dialog, so long documents are usable without downloading anything.

<figure><img src="https://3835013762-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCy5rSNtQmtqYCGzJlNEB%2Fuploads%2Fgit-blob-3ae138cb7d612a6962da076b31afd449e80d4997%2Fforms-file-preview-03-pdf.png?alt=media" alt="The preview dialog showing a PDF with the browser&#x27;s page thumbnails, page counter and zoom controls"><figcaption><p>Page thumbnails, a page counter and zoom, all inside the dialog.</p></figcaption></figure>

A Word file is converted for display, so what you see is the text and the structure rather than the exact page. The dialog says so underneath: *Approximate view. Download the file to see its exact layout.* Use **Download** whenever the layout matters.

***

**Step 4:** Keep it. **Download** saves the file under its original name. It works from inside the dialog and it is also what a click does for the kinds that never open a dialog.

> **💡 Tip:** You can download from the dialog after reading, as many times as you like. Each click fetches a fresh link, so a dialog left open on a second screen all afternoon still downloads correctly.

***

## Why links are not in the page

Every link to an uploaded file is created at the moment you click, lives a few minutes and is never written into the page, into an email or into the CSV export.

That has one visible consequence. If a dialog stays open longer than the link lives, the next thing it tries to load fails and you get *The preview could not load.* with a **Try again** button. **Try again** gets a new link rather than retrying the dead one, so it works.

It also means the dashboard gives you no link you can copy and pass to someone outside your workspace. To share a file, download it and send the file itself, or invite the person to the workspace. The one exception is the webhook: each delivery carries a permanent link per file, meant for your own systems. See [File answers](/dforms/connect/webhooks/payload-reference.md#file-answers). See [Members & roles](/dforms/account/members-and-roles.md).

***

## Large files

Files over 25 MB never open in a dialog, whatever their type: they download instead. A browser asked to open a very large file in a dialog does not fail, it just sits there while the whole thing arrives, and a download at least shows progress.

On `app.dforms.ai` the upload limit is 10 MB, so you will only meet this on a deployment configured to accept more.

***

## In the export and in webhooks

The CSV export and your webhooks carry the file answer too, but neither carries the file's contents.

* **CSV:** the cell holds the file's name and nothing else. See [Export to CSV](/dforms/results/export-csv.md).
* **Webhooks:** the answer arrives inside `data` as an object rather than a string, with a permanent `url` that opens the file without signing in. See [Payload & headers reference](/dforms/connect/webhooks/payload-reference.md).
* **Submission emails:** the answer is written as the filename and nothing else, because an email is the wrong place for a link that expires in minutes.

***

## Deleting

Deleting a response, on its own or as part of a selection, removes it from **Submissions**, together with the file answer it showed. Deleting the whole form removes all of its responses. Neither can be undone. The stored file itself is not deleted by either action. See [Security & Privacy](/dforms/security-and-privacy.md).

***

## What's next

* [File upload](/dforms/builder/question-types/file-upload.md): set up the question and choose what it accepts.
* [Submissions](/dforms/results/submissions.md): the table, the response panel and deleting rows.
* [Export to CSV](/dforms/results/export-csv.md): the same rows as a spreadsheet.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.dapta.ai/dforms/results/uploaded-files.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
