JavaScript-Datei-Upload-Formular

Baue ein Datei-Upload-Formular mit purem JavaScript und ganz ohne eigene Upload-API. Poste das rohe FormData mit fetch, sodass der Browser die Multipart-Boundary setzt, und die Datei landet zusammen mit den anderen Feldern in deinem Posteingang. Kopiere den Code und ergänze deinen Zugangsschlüssel.

So baust du es

  1. Erstelle ein Formular in deinem Formpaste-Dashboard und kopiere den Zugangsschlüssel.
  2. Verbinde Storage im Dashboard, damit das Formular Uploads annehmen kann.
  3. Kopiere das Formular und das Script oben, ergänze deinen Zugangsschlüssel, dann veröffentlichen.

Prompt für deinen KI-Coding-Agenten

Add a Formpaste file upload form to my page with vanilla JavaScript. Use a real form with enctype multipart/form-data and a file input, plus a submit listener that POSTs new FormData(form) directly (not URLSearchParams) to https://api.formpaste.com/submit with a hidden access_key input. Do not build an upload endpoint of my own.

Oder verbinde den Formpaste-MCP-Server mit Claude Code, Codex, Cursor, Claude Desktop, VS Code oder einem beliebigen mcp-remote-Client. Zur Einrichtungsanleitung.

JavaScript-Fallstricke

Ein Kontaktformular mit purem JavaScript ist einfaches HTML plus ein Submit-Listener. Richte das Formular auf Formpaste aus, füge ein Skript hinzu, das preventDefault aufruft und die FormData mit fetch sendet, und dein Besucher bleibt auf der Seite. Kein Framework, kein Build-Schritt, kein eigenes Backend.

Es ist ein Formular plus ein Listener

Behalte das echte Formular-Markup mit einer action, die auf den Formpaste-Endpunkt zeigt, und füge dann einen Submit-Listener hinzu, der preventDefault aufruft und mit fetch sendet. Es gibt kein Framework und nichts zu installieren, also funktioniert derselbe Codeschnipsel auf einer statischen Seite, in einem CMS-Template oder auf einer handgeschriebenen Seite.

Progressive Enhancement ist gratis

Weil das Markup ein echtes Formular mit einer action ist, sendet es trotzdem, wenn dein Skript nicht lädt oder JavaScript ausgeschaltet ist. Der Listener ist ein Upgrade, das deinen Besucher auf der Seite hält, keine Voraussetzung.

Sende FormData, kein selbstgebautes Objekt

Baue den Body mit new FormData(form), damit jedes Feld mit seinem Namen dabei ist, einschließlich des versteckten access_key. Verpacke sie für ein normales Textformular in URLSearchParams, oder sende die FormData direkt, wenn das Formular ein Datei-Feld enthält.

Kümmere dich selbst um die Antwort

Der Endpunkt liefert JSON zurück (success, message, id). Warte auf den fetch und zeig deine eigene Erfolgs- oder Fehlermeldung, ruf dann form.reset() auf. Oder leg im Dashboard eine Redirect-URL fest und lass das einfache Formular-Posting die Arbeit ganz ohne Skript erledigen.

Worauf es ankommt

Eine Datei bedeutet multipart, nicht urlencoded

Sobald das Formular ein Datei-Feld enthält, muss es multipart Formulardaten senden. Der generierte Code setzt enctype und schickt das rohe FormData, sodass die Datei zusammen mit den anderen Feldern mitläuft. Du brauchst keinen eigenen Upload-Endpunkt.

Der Upload geht direkt vom Client zu Formpaste

Der Browser sendet die Datei direkt an Formpaste, sodass deine App den Upload nie puffert oder parst. Damit umgehst du Größen- und Laufzeitlimits von serverlosen Umgebungen komplett.

Setz klare Erwartungen bei Größe und Typ

Sag den Leuten, was du akzeptierst. Datei-Uploads sind ein Pro-Feature; verbinde zuerst Storage im Dashboard und halte das Feld ehrlich, was akzeptierte Typen und Größe angeht.

So funktioniert es

Drei einfache Schritte, bis Formular-Einsendungen in deinem E-Mail-Posteingang landen.
Erstelle dein Formular, setze die action-URL auf den Formpaste-Endpunkt und trage deinen Zugangsschlüssel ein.

1

Formular erstellen

Melde dich an, verifiziere deine E-Mail und erstelle einen Zugangsschlüssel im Dashboard.

2

Code kopieren

Füge das Snippet oben in dein Projekt ein. Wähle CSS oder Tailwind passend zu deiner Website.

<form id="form" action="https://api.formpaste.com/submit" method="POST" enctype="multipart/form-data" class="mx-auto flex w-full max-w-md flex-col gap-4 rounded-xl border border-gray-200 bg-white p-6 shadow-sm dark:border-gray-800 dark:bg-gray-950">
  <input type="hidden" name="access_key" value="YOUR_ACCESS_KEY_HERE">
  <label class="flex flex-col gap-1.5 text-sm font-medium text-gray-900 dark:text-gray-100">Name
    <input type="text" name="name" required class="rounded-md border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 shadow-sm outline-none focus-visible:ring-2 focus-visible:ring-gray-900 dark:border-gray-700 dark:bg-gray-900 dark:text-gray-100 dark:focus-visible:ring-gray-100" />
  </label>
  <label class="flex flex-col gap-1.5 text-sm font-medium text-gray-900 dark:text-gray-100">E-Mail
    <input type="email" name="email" placeholder="du@beispiel.de" required class="rounded-md border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 shadow-sm outline-none focus-visible:ring-2 focus-visible:ring-gray-900 dark:border-gray-700 dark:bg-gray-900 dark:text-gray-100 dark:focus-visible:ring-gray-100" />
  </label>
  <label class="flex flex-col gap-1.5 text-sm font-medium text-gray-900 dark:text-gray-100">Datei
    <input type="file" name="file" required class="rounded-md border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 shadow-sm outline-none focus-visible:ring-2 focus-visible:ring-gray-900 dark:border-gray-700 dark:bg-gray-900 dark:text-gray-100 dark:focus-visible:ring-gray-100" />
  </label>
  <label class="flex flex-col gap-1.5 text-sm font-medium text-gray-900 dark:text-gray-100">Nachricht
    <textarea name="message" class="min-h-28 rounded-md border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 shadow-sm outline-none focus-visible:ring-2 focus-visible:ring-gray-900 dark:border-gray-700 dark:bg-gray-900 dark:text-gray-100 dark:focus-visible:ring-gray-100"></textarea>
  </label>
  <button type="submit" class="w-full rounded-md bg-gray-900 px-4 py-2 text-sm font-medium text-white shadow-sm transition-colors hover:bg-gray-800 disabled:opacity-60 dark:bg-white dark:text-gray-900 dark:hover:bg-gray-200">Hochladen</button>
</form>

<script>
  const form = document.getElementById("form");
  form.addEventListener("submit", async (e) => {
    e.preventDefault();
    await fetch("https://api.formpaste.com/submit", { method: "POST", body: new FormData(form) });
    form.reset();
  });
</script>
3

Zugangsschlüssel hinzufügen

Ersetze den Platzhalter durch deinen Zugangsschlüssel, um Einsendungen zu empfangen.

<input type="hidden" name="access_key" value="YOUR_ACCESS_KEY_HERE">

JavaScript-Datei-Upload-Formular FAQ

Formular einfügen. Einsendungen erhalten.

Sofort, ohne Backend, Server oder Datenbanken einzurichten. 250 Einsendungen/Monat kostenlos - keine Kreditkarte.

Andere JavaScript-Formulare