Ein frei kopier- und anpassbares Lehrmittel von eduskript.org

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:

  1. Drag and drop in den Editor — Dateien werden hochgeladen, und eine Markdown-Referenz wird an der Cursorposition eingefügt
  2. Files-Panel (obere Toolbar → Files) — Drag-and-Drop oder Klick auf „Upload" für Massen-Uploads
  3. 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.

![Schema](schema.png)

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. Pfade

Alle Dateien leben in einem flachen Namensraum pro Skript (aktuell keine Ordner). Dateinamen unterscheiden Gross-/Kleinschreibung. Hast du Photo.jpg und referenzierst photo.jpg, löst das nicht auf.


Unterstützte Dateitypen

Eduskript akzeptiert und liefert jeden Dateityp aus — manche bekommen aber eine Sonderbehandlung:

TypErweiterungenSonderverhalten
Bilder.png, .jpg, .jpeg, .webp, .gif, .svgEingebettet mit ![](), grössenanpassbar, ausrichtbar
Excalidraw.excalidraw.light.svg + .excalidraw.dark.svgTheme-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, .sqliteTreiben interaktive SQL-Editoren an (siehe SQL Studio)
PDFs.pdfInline eingebettet oder heruntergeladen
Code-Beispiele.py, .js, .sql, .html, .css usw.Verlinkbar; keine spezielle Einbettung
Daten.csv, .json, .xlsx, .tsvVerlinkbar, herunterladbar
Dokumente.docx, .txt, .mdVerlinkbar, 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:

  1. Kosten — riesige Datenbanken oder Videos können über viele Skripte hinweg geteilt werden, zu den Kosten von einer einzigen
  2. 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 = öffentlich

Leg 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:

![Eine kurze Bildunterschrift](my-lecture.mp4)

Siehe das Kapitel Video für Details zu Postern, Autoplay und Inline-Wiedergabe-Flags.


Datei-Spickzettel

ZielWie
Eine Datei hochladenDrag-and-drop in den Editor, oder Files-Panel → Upload
Ein Bild einbetten![Bildunterschrift](file.png)
Auf eine herunterladbare Datei verlinken[Download](file.pdf)
Eine Datenbank im SQL-Editor referenzieren```sql editor db="file.db"
Ein Video einbetten![Bildunterschrift](file.mp4)
Massen-UploadFiles-Panel → mehrere Dateien gleichzeitig ziehen
Die direkte URL einer Datei findenFiles-Panel → Datei → „Copy URL"
Eine Datei über Skripte hinweg wiederverwendenErneut hochladen — Deduplizierung macht es gratis