simple-web-file-upload/README.md

5.2 KiB
Raw Blame History

Simple File Upload

Kunden laden Dateien/Ordner über einen individuellen Link hoch (ohne Login). Admin + Sachbearbeiter verwalten Kunden im Adminportal und greifen per WebDAV zu.

Start

cp .env.example .env     # optional: Ports anpassen
docker compose up -d --build
  • Adminportal: http://localhost:3500/
  • WebDAV: webdav://HOST:1900/ (Basic Auth, dieselben Benutzer wie im Adminportal)

Beim ersten Start öffnet sich ein Setup-Wizard — dort legst du den ersten Admin an.

Rollen

  • Admin: legt Kunden + weitere Benutzer (Admins / Sachbearbeiter) an, verwaltet Upload-Links und pro-Kunde-Zugriffe. Hat WebDAV-Vollzugriff auf alles.
  • Sachbearbeiter (Staff): sieht im Adminportal nur die Kunden, auf die ihm der Admin Zugriff erteilt hat. Per WebDAV greift er auf die zugeteilten Kundenordner zu (read oder write).
  • Kunde: kein Login; Upload via individuellem Token-Link (optional mit Passwort + Ablaufdatum). Sieht keine Dateiliste.

Konfiguration

.env (Ports)

Variable Default Zweck
APP_PORT 3500 Host-Port für Adminportal + Upload
WEBDAV_PORT 1900 Host-Port für WebDAV

Admin-GUI → Einstellungen

  • Öffentliche Basis-URL: wird in generierten Upload-Links verwendet. Leer = aus Request ableiten.
  • Cron-Intervall (Minuten): periodischer DB/FS-Abgleich (entfernt verwaiste DB-Einträge von via WebDAV gelöschten Dateien und erfasst direkt per WebDAV hochgeladene Dateien).

Volumes

  • ./data/db/ → SQLite-Datei neben der docker-compose.yml
  • ./data/uploads/ → ein Unterordner pro Kunde (Slug)
  • Named Volume webdav-config → dynamisch generierte Apache-Config

Beide Container laufen als UID 1000:1000. Falls vorhandene Daten root gehören:

sudo chown -R 1000:1000 data/

Wie die WebDAV-ACLs funktionieren

Der App-Container erzeugt bei jeder Benutzer-/Kundenänderung:

  • /webdav-config/htpasswd — alle Benutzer (bcrypt-Hashes direkt aus DB)
  • /webdav-config/access.conf — pro Kundenordner ein <Location>-Block:
    • gleiche Read- und Write-User → ein Require user …
    • unterschiedliche → <Limit GET PROPFIND OPTIONS HEAD> + <LimitExcept …> für saubere Trennung

Der WebDAV-Container (Debian Apache) beobachtet das Verzeichnis via inotifywait und ruft apachectl graceful auf → Änderungen sind in ~2 Sek. wirksam.

Kunden-Upload

  • Datei-Button, Ordner-Button oder Drag & Drop (Dateien und Ordner — Struktur bleibt erhalten).
  • Optional Passwortabfrage, optional Ablaufdatum.
  • Kunde sieht keine Dateiliste, nur eigenes Upload-Feedback.

WebDAV-Zugriff

  • macOS Finder: Gehe zu → Mit Server verbinden → http://HOST:1900/
  • Linux / KDE Dolphin: webdav://<user>@HOST:1900/
  • Windows: siehe Abschnitt unten (einmalige Einrichtung nötig)

Write-Rechte umfassen: PUT, DELETE, MKCOL, MOVE, COPY, PROPPATCH, LOCK, UNLOCK. In Dolphin löscht Shift+Entf direkt (umgeht den nicht existierenden WebDAV-Papierkorb).

Windows als Netzlaufwerk verbinden

Windows verweigert standardmäßig WebDAV via Basic Auth über HTTP und limitiert Dateien auf 50 MB. Beides per Registry erlauben:

  1. windows/enable-webdav-basicauth.reg per Rechtsklick → Zusammenführen (als Administrator) ausführen.

  2. WebClient-Dienst (neu) starten:

    sc config WebClient start=auto
    net stop WebClient
    net start WebClient
    
  3. Verbinden — HTTP-URL ist die saubere Variante (eindeutig WebDAV, keine SMB-Verwechslung). Beispiel mit karlheinz-Credentials, gemountet als Z::

    net use Z: http://HOST:1900/frank-meier /user:karlheinz DEINPW /persistent:yes
    

    Im Explorer „Netzlaufwerk verbinden" → Adresse: http://HOST:1900/ bzw. http://HOST:1900/frank-meier/.

    Alternativ mit UNC-Syntax (intern dasselbe, etwas hakeliger): \\HOST@1900\DavWWWRoot\frank-meier\@1900 und \DavWWWRoot\ sind dabei Pflicht, sonst landest du bei SMB Port 445.

Wenn weiterhin „Ordner nicht gefunden" → meist ist der WebClient-Dienst nicht gestartet oder das Registry-Merge wurde nicht als Administrator ausgeführt.

Bekannte Windows-Eigenheiten bei Read-Only-Zugriff

Hat ein Sachbearbeiter nur Leserechte, zeigt der Windows-Explorer gelegentlich seltsames Verhalten:

  • Entf-Taste „löscht" die Datei optisch — der Server lehnt das DELETE korrekt mit 403 ab, aber der Explorer entfernt das Icon optimistisch. F5 stellt die echte Sicht wieder her.
  • Beim Doppelklick: „Datei existiert nicht, neu erstellen?" — Office & Editoren senden vor dem Öffnen ein LOCK. Bei Read-Only schlägt das mit 403 fehl, das Programm denkt die Datei sei weg. Nach 3060 Sek. (WebClient Negative-Cache läuft aus) klappt es dann meist direkt.

Wenn dich das stört: windows/disable-webdav-locking.reg ausführen — schaltet WebDAV-Locking systemweit ab. Read-Only-Viewing läuft dann sofort und ohne Wartezeit. Trade-off: gemeinsames Bearbeiten ohne Konflikte kann nicht mehr über WebDAV-Locks koordiniert werden.