Dateien hinzufügen
Jedes Skript hat seinen eigenen Dateispeicher. Leg Dateien ab und referenziere sie von jeder Seite in diesem Skript per Dateiname. Eduskript kümmert sich um Deduplizierung, inhaltsadressierten Speicher und die Auslieferung.
Dateien hochladen
Drei Wege:
- Drag and drop in den Editor — Dateien werden hochgeladen, und eine Markdown-Referenz wird an der Cursorposition eingefügt
- Files-Panel (obere Toolbar → Files) — Drag-and-Drop oder Klick auf „Upload" für Massen-Uploads
- Manage-Schublade — hat ebenfalls ein Datei-Panel für Uploads ausserhalb der aktiven Seite
Dateien sind auf das Skript beschränkt. Zwei Skripte mit gleichnamigen Dateien kollidieren nicht — jedes hat seinen eigenen Speicher.
Dateien in Markdown referenzieren
Nutze den Dateinamen. Das System löst ihn automatisch zur URL der Datei auf.
Lade den [Datensatz](data.csv) herunter.

Probier das [Arbeitsblatt-PDF](worksheet.pdf) aus.
Im Hintergrund findet der Markdown-Prozessor die Datei per Namen in der Dateiliste des Skripts und schreibt den Link auf /api/files/<file-id> um. Du musst nicht an IDs denken — nutz einfach den menschenlesbaren Dateinamen.
Dateinamen vs. PfadeAlle Dateien leben in einem flachen Namensraum pro Skript (aktuell keine Ordner). Dateinamen unterscheiden Gross-/Kleinschreibung. Hast du
Photo.jpgund referenzierstphoto.jpg, löst das nicht auf.
Unterstützte Dateitypen
Eduskript akzeptiert und liefert jeden Dateityp aus — manche bekommen aber eine Sonderbehandlung:
| Typ | Erweiterungen | Sonderverhalten |
|---|---|---|
| Bilder | .png, .jpg, .jpeg, .webp, .gif, .svg | Eingebettet mit ![](), grössenanpassbar, ausrichtbar |
| Excalidraw | .excalidraw.light.svg + .excalidraw.dark.svg | Theme-fähiges Paar, referenziert als name.excalidraw |
| Video | .mp4, .mov | Über Mux geroutet, mit adaptivem Streaming und Auto-Untertiteln (siehe Kapitel Video) |
| SQLite-Datenbanken | .db, .sqlite | Treiben interaktive SQL-Editoren an (siehe SQL Studio) |
| PDFs | .pdf | Inline eingebettet oder heruntergeladen |
| Code-Beispiele | .py, .js, .sql, .html, .css usw. | Verlinkbar; keine spezielle Einbettung |
| Daten | .csv, .json, .xlsx, .tsv | Verlinkbar, herunterladbar |
| Dokumente | .docx, .txt, .md | Verlinkbar, herunterladbar |
| Alles andere | (beliebig) | Als Download verlinkbar |
Inhaltsadressierte Deduplizierung
Eduskript speichert Dateien nach ihrem SHA-256-Hash, nicht nach Dateinamen. Das bedeutet:
- Dieselbe Datei in fünf verschiedenen Skripten hochladen → einmal in S3 gespeichert
- Dieselbe Datei erneut hochladen (z.B. nach dem Korrigieren eines Tippfehlers in einer anderen Datei) → kein zusätzlicher Speicher
- Der Dateiname kann sich ändern, ohne die Bytes neu hochzuladen
Wird eine Datei gelöscht, wird der zugrunde liegende Speicher referenzgezählt: Das eigentliche S3-Objekt wird erst entfernt, wenn kein Skript diesen Hash mehr referenziert.
Das ist aus zwei Gründen wichtig:
- Kosten — riesige Datenbanken oder Videos können über viele Skripte hinweg geteilt werden, zu den Kosten von einer einzigen
- Caching — Dateien werden mit langen Cache-Headern (1 Jahr) ausgeliefert, da der Hash garantiert, dass sich die Bytes für eine gegebene URL nie ändern
Datei-Geltungsbereich und Zugehörigkeit
Dateien gehören einem Skript, nicht einer Seite. Das bedeutet:
- Alle Seiten in einem Skript teilen sich denselben Dateipool
- Eine Datei zwischen Skripten zu verschieben bedeutet Herunterladen + erneutes Hochladen (das System migriert nicht automatisch)
- Ein Skript zu löschen entfernt seine Dateireferenzen (und referenzgezählte S3-Objekte, falls kein anderes Skript sie nutzt)
- Ein Skript zu forken kopiert alle Dateireferenzen (kein erneutes Hochladen — hier zeigt sich der Vorteil des inhaltsadressierten Speichers)
Für gemeinsam genutzte Ressourcen, die du über viele Skripte hinweg verwenden willst, prüf die Organisations-Bibliothek (falls dein Account in einer Organisation ist) — Dateien dort sind über alle Skripte der Organisation hinweg zugänglich.
Öffentlicher Zugriff für veröffentlichte Inhalte
Veröffentlichst du ein Skript, werden alle Dateien in diesem Skript öffentlich zugänglich unter /api/files/<file-id>. Schüler müssen sich nicht authentifizieren.
Drafts sind privat — nur du (und Mitarbeitende mit Bearbeitungsrechten) können die Datei-URLs abrufen.
Published = öffentlichLeg keine internen Materialien, Entwurfsinhalte oder irgendetwas Sensibles in die Dateien eines published Skripts. Sobald die URL einer Datei abgerufen wurde (durch einen Schüler, durch einen Suchcrawler), ist sie nicht mehr geheim. Um etwas privat zu halten, lass es in einem unveröffentlichten Skript.
Datenbankdateien (SQLite)
Datenbankdateien (.db, .sqlite) bekommen die volle SQL-Studio-Integration. Zieh eine .db in den Editor; das Drop-Menü bietet „Insert SQL editor" an, das das passende Markdown schreibt:
```sql editor db="netflix.db"
SELECT * FROM tv_show LIMIT 10;
```
Siehe das Kapitel SQL Studio im Bereich Components für Query-Syntax, Schema-Diagramme und Multi-File-Editoren.
Videodateien
Videodateien (.mp4, .mov) werden über Mux geroutet für adaptives Streaming und automatisch generierte Untertitel. Sie landen im Videos-Panel statt im Files-Panel. Referenzier sie in Markdown wie Bilder:

Siehe das Kapitel Video für Details zu Postern, Autoplay und Inline-Wiedergabe-Flags.
Datei-Spickzettel
| Ziel | Wie |
|---|---|
| Eine Datei hochladen | Drag-and-drop in den Editor, oder Files-Panel → Upload |
| Ein Bild einbetten |  |
| Auf eine herunterladbare Datei verlinken | [Download](file.pdf) |
| Eine Datenbank im SQL-Editor referenzieren | ```sql editor db="file.db" |
| Ein Video einbetten |  |
| Massen-Upload | Files-Panel → mehrere Dateien gleichzeitig ziehen |
| Die direkte URL einer Datei finden | Files-Panel → Datei → „Copy URL" |
| Eine Datei über Skripte hinweg wiederverwenden | Erneut hochladen — Deduplizierung macht es gratis |