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

# Datei-Uploads

> Nimm Dateianhänge an einem Formular entgegen, gescannt, in R2 gespeichert und aus deinem Dashboard herunterladbar - Pro.

<Info>**Pro** - ein Formular im kostenlosen Tarif lehnt eine Multipart-Einsendung mit Anhängen ab.</Info>

Formpaste kann Dateianhänge an deinen Formularen entgegennehmen. Uploads sind ein normaler
`multipart/form-data`-POST an denselben [`/submit`](/docs/de/quickstart)-Endpunkt, den du bereits
verwendest, kein separater Upload-Endpunkt, kein JavaScript erforderlich.

## Ein Datei-Eingabefeld hinzufügen

### Reines HTML (ohne JS)

Füge dem Formular `enctype="multipart/form-data"` und ein Datei-Eingabefeld hinzu:

```html theme={null}
<form action="https://api.formpaste.com/submit" method="POST" enctype="multipart/form-data">
  <input type="hidden" name="access_key" value="YOUR_ACCESS_KEY">
  <input type="text" name="name" required>
  <input type="email" name="email" required>
  <textarea name="message"></textarea>
  <input type="file" name="attachment" multiple>
  <button type="submit">Send</button>
</form>
```

### React / Vue / Astro / beliebiges JS

Erstelle ein `FormData`-Objekt und sende es per POST. Setze `Content-Type` nicht selbst; der
Browser fügt die korrekte Multipart-Grenze automatisch hinzu:

```js theme={null}
const form = new FormData();
form.set("access_key", "YOUR_ACCESS_KEY");
form.set("name", name);
form.set("email", email);
for (const file of fileInput.files) form.append("attachment", file);

const res = await fetch("https://api.formpaste.com/submit", {
  method: "POST",
  body: form,
});
```

## Limits

| Limit                                        | Wert           |
| -------------------------------------------- | -------------- |
| Pro Datei                                    | 3,5 MB         |
| Pro Einsendung                               | 3 Dateien      |
| Pro Konto (alle Formulare, gesamte Laufzeit) | 5 GB insgesamt |

Eine Datei über dem Limit pro Datei oder eine Einsendung mit zu vielen Dateien wird
vollständig abgelehnt, nichts wird stillschweigend verworfen oder gekürzt:

| Code                   | HTTP | Bedeutung                                                   |
| ---------------------- | ---- | ----------------------------------------------------------- |
| `file_too_large`       | 413  | Eine hochgeladene Datei ist zu groß.                        |
| `too_many_files`       | 400  | Zu viele Dateien in dieser Einsendung.                      |
| `empty_file`           | 400  | Eine hochgeladene Datei war leer.                           |
| `storage_cap_exceeded` | 413  | Das Speicherlimit dieses Kontos für Dateien wurde erreicht. |

## Was mit einer hochgeladenen Datei passiert

1. Die Datei wird in den Speicher (Cloudflare R2) hochgeladen und privat gehalten, während sie
   **gescannt** wird. Nichts wird freigegeben, bevor das Scannen abgeschlossen ist, das
   funktioniert nach dem **Fail-Closed-Prinzip**: Kann der Scan nicht bestätigen, dass eine
   Datei sauber ist, wird sie nicht verfügbar gemacht.
2. Besteht die Datei den Scan, wird sie **aus deinem Dashboard** herunterladbar. Öffne die
   Einsendung und lade die Datei herunter. Downloads sind auf den Kontoinhaber beschränkt: Nur
   das Konto, dem das Formular gehört, kann sie über einen kurzlebigen, authentifizierten Link
   abrufen. Dateien sind niemals öffentlich per URL erreichbar.
3. Besteht die Datei den Scan nicht (oder ist ein unsicherer/nicht erkannter Dateityp), wird
   sie blockiert und dir nie zugestellt.

Dateien werden niemals als E-Mail-Anhang verschickt. Deine Benachrichtigungs-E-Mail verlinkt
dich zum Dashboard, um sie anzusehen oder herunterzuladen.

**Aufbewahrung:** Eine Datei wird so lange aufbewahrt wie ihre Einsendung (Pro: 365 Tage) und
danach automatisch gelöscht. Das Löschen einer Einsendung löscht auch ihre Dateien sofort.

## Kostenlos vs. Pro

Formulare im kostenlosen Tarif akzeptieren keine Datei-Uploads. Eine Multipart-Anfrage mit
Anhängen an ein Formular im kostenlosen Tarif wird abgelehnt mit:

| Code               | HTTP | Bedeutung                                 |
| ------------------ | ---- | ----------------------------------------- |
| `upgrade_required` | 403  | Diese Funktion erfordert einen Pro-Tarif. |

## Keine Konfiguration nötig

Kein Schalter im Dashboard umzulegen. Jedes Formular im Pro-Tarif akzeptiert
`multipart/form-data`-Einsendungen mit Dateifeldern, sobald du ein `<input type="file">`
hinzufügst (oder Dateien an ein `FormData`-Objekt anhängst).
