2025-04-25 08:56:35 +02:00
# pyUpload (TKinter-Version)
2025-03-12 22:21:30 +01:00
2025-04-21 21:32:41 +02:00

2025-03-12 22:21:30 +01:00
2025-04-21 21:32:41 +02:00
## ⚠️ Projektstatus: Eingefroren – Nur noch Bugfixes
2025-03-12 22:21:30 +01:00
2025-08-17 12:18:00 +02:00
> Diese Version von **pyUpload** wird **nicht weiterentwickelt** und erhält nur noch Fehlerbehebungen.
> Die neue Version mit Flask-Backend wird **bald** verfügbar sein unter:
2025-03-12 22:21:30 +01:00
2025-04-21 21:32:41 +02:00
🔗 ** < https: // github . com / realAscot / pyUpload2 > **
2025-03-12 22:21:30 +01:00
2025-08-17 12:18:00 +02:00
**DIESE** Version ist aber voll funktionsfähig, sowohl die reine Python-Version wie auch die Windows `.exe`
- (< https: // github . com / realAscot / pyUpload / releases / tag / v1 . 0 . 0-alpha > )
Dem Programm liegen bootstrap Routinen bei die alle notwendigen Biblioteken nachinstallieren.
2025-04-21 21:32:41 +02:00
---
2025-03-12 22:21:30 +01:00
2025-04-25 08:56:35 +02:00
## 📑 Inhalt der Readme
- [pyUpload (TKinter-Version) ](#pyupload-tkinter-version )
2025-04-22 10:45:56 +02:00
- [⚠️ Projektstatus: Eingefroren – Nur noch Bugfixes ](#️ -projektstatus-eingefroren--nur-noch-bugfixes )
2025-04-25 08:56:35 +02:00
- [📑 Inhalt der Readme ](#-inhalt-der-readme )
2025-04-22 10:45:56 +02:00
- [pyUpload – Sicherer Datei-Upload-Server über HTTPS (lokal \& offline) ](#pyupload--sicherer-datei-upload-server-über-https-lokal--offline )
- [🛠 Features ](#-features )
- [🚀 Schnellstart ](#-schnellstart )
2025-05-07 19:16:10 +02:00
- [▶️ Für Windows ](#️ -für-windows )
- [🐧 Für Linux / macOS ](#-für-linux--macos )
2025-04-22 10:45:56 +02:00
- [🧩 Kommandozeilenoptionen ](#-kommandozeilenoptionen )
- [🌐 Zugriff im Browser ](#-zugriff-im-browser )
- [📁 Logs \& Uploads ](#-logs--uploads )
- [🔐 Hinweis zur SSL-Zertifikatswarnung ](#-hinweis-zur-ssl-zertifikatswarnung )
2025-04-23 16:32:02 +02:00
- [💡 Ideen für zukünftige Entwicklungen ](#-ideen-für-zukünftige-entwicklungen )
2025-04-22 10:45:56 +02:00
- [🐛 Bekannte Bugs ](#-bekannte-bugs )
2025-05-08 15:43:17 +02:00
- [🤖 Autor und Beteiligte ](#-autor-und-beteiligte )
- [☕ Support ](#-support )
2025-04-22 10:45:56 +02:00
- [📝 Lizenz ](#-lizenz )
---
2025-04-23 16:32:02 +02:00
2025-04-22 10:45:56 +02:00
## pyUpload – Sicherer Datei-Upload-Server über HTTPS (lokal & offline)
2025-03-12 22:21:30 +01:00
2025-04-21 21:32:41 +02:00
Diese Version basiert auf **Tkinter (GUI + QR)** sowie einer optionalen **reinen CLI-Nutzung** .
Sie ist vollständig lokal lauffähig – ganz ohne Installation von externen Tools oder komplexen Abhängigkeiten.
2025-03-12 22:21:30 +01:00
2025-04-25 08:56:35 +02:00
[🔝 ](#-inhalt-der-readme )
2025-04-21 21:32:41 +02:00
---
2025-03-12 22:21:30 +01:00
2025-04-21 21:32:41 +02:00
## 🛠 Features
2025-03-12 22:21:30 +01:00
2025-04-21 21:32:41 +02:00
- **HTTPS-gesicherter Datei-Upload**
- **Selbstsigniertes SSL-Zertifikat bei Bedarf**
- **QR-Code-basierte Verbindung für Smartphones**
- **Client-spezifische Verzeichnisse und Logs**
- **GUI und Konsolen-Modus verfügbar**
- **automatische Einrichtung von `.venv` und Abhängigkeiten**
- **kein Installationsskript mehr nötig – alles passiert beim Start von `main.py` **
2025-03-13 00:37:55 +01:00
2025-04-25 08:56:35 +02:00
[🔝 ](#-inhalt-der-readme )
2025-04-21 21:32:41 +02:00
---
2025-03-13 00:37:55 +01:00
2025-04-22 10:45:56 +02:00
## 🚀 Schnellstart
2025-04-21 21:32:41 +02:00
2025-05-07 19:16:10 +02:00
### ▶️ Für Windows
2025-04-21 21:32:41 +02:00
1. Lade das Projekt herunter oder klone es:
```sh
git clone https://github.com/realAscot/pyUpload
2025-03-13 00:37:55 +01:00
```
2025-04-22 10:45:56 +02:00
Alternativ einfach eine bereinigte `.zip` bei den [Releases auf GitHub ](https://github.com/realAscot/pyUpload/releases/ ) herrunterladen.
2025-04-25 08:56:35 +02:00
Diese enthält kein `.git` -Archiv und nur das Allernötigste für den Betrieb des Programms.
2025-04-22 10:45:56 +02:00
2025-04-21 21:32:41 +02:00
2. Starte die App mit:
```cmd
start.cmd
2025-03-13 00:37:55 +01:00
```
2025-04-21 21:32:41 +02:00
2025-04-21 23:34:45 +02:00
Alternativ in PowerShell:
2025-04-21 21:32:41 +02:00
```powershell
cmd /c start.cmd
2025-03-12 22:21:30 +01:00
```
2025-04-21 23:34:45 +02:00
⚠️ **Alternative 2 falls die Ausführung per Doppelklick auf .bat oder .cmd gesperrt ist:**
2025-04-25 08:56:35 +02:00
Doppelklick auf `start.pyw` oder im Terminal mit:
```cmd
python start.pyw`
```
2025-04-21 23:34:45 +02:00
2025-04-25 08:56:35 +02:00
Es ist möglich, dass beim ersten Mal gefragt wird, womit das Programm gestartet werden soll.
2025-04-21 23:34:45 +02:00
Einfach die Python-Installation suchen und `python.exe` wählen.
2025-04-25 08:56:35 +02:00
Ich empfehle, eine Verknüpfung der `start.pyw` z. B. auf dem Desktop zu erstellen
2025-04-21 23:34:45 +02:00
2025-05-07 19:16:10 +02:00
### 🐧 Für Linux / macOS
2025-03-12 22:21:30 +01:00
2025-04-21 21:32:41 +02:00
1. Stelle sicher, dass Python 3.8+ installiert ist:
2025-03-12 22:21:30 +01:00
2025-04-21 21:32:41 +02:00
```bash
python3 --version
2025-03-12 22:21:30 +01:00
```
2025-04-21 21:32:41 +02:00
2025-05-07 19:16:10 +02:00
Stelle sicher, dass die nötigen Systempakete vorhanden sind:
```bash
sudo apt install python3-venv python3-tk
```
Bei neueren Systemen mit z. B. Python 3.12:
```bash
sudo apt install python3.12-venv python3.12-tk
```
Dies trifft nicht bei allen Systemen zu, bei Ubuntu z.B muss TKinter händisch leider nachinstalliert werden.
2025-04-21 21:32:41 +02:00
2. Mache das Startscript ausführbar:
```bash
chmod +x start.sh
2025-03-13 00:37:55 +01:00
```
2025-04-21 21:32:41 +02:00
3. Starte die App:
```bash
./start.sh
2025-03-12 22:21:30 +01:00
```
2025-04-21 21:32:41 +02:00
---
Beim ersten Start wird automatisch:
- eine virtuelle Umgebung `.venv/` im `app/` -Verzeichnis erzeugt
- `requirements.txt` installiert
- das Programm danach neu aus der Umgebung gestartet
2025-04-25 08:56:35 +02:00
[🔝 ](#-inhalt-der-readme )
2025-04-21 21:32:41 +02:00
---
## 🧩 Kommandozeilenoptionen
2025-04-22 10:45:56 +02:00
Du musst Dich im Verzeichnis `./app` befinden:
```cmd
python main.py -h oder --h # Hilfe
python main.py --nogui # Start ohne GUI / QR
python main.py --port 9999 # Custom-Port verwenden
2025-04-21 21:32:41 +02:00
```
2025-04-22 10:45:56 +02:00
oder für Verknüpfungen die `start.pyw` verwenden:
```cmd
pythonw.exe start.pyw -h oder --h # Hilfe
pythonw.exe start.pyw --nogui # Start ohne GUI / QR
pythonw.exe start.pyw --port 9999 # Custom-Port verwenden
```
Wenn Du die Dateierweiterung `.pyw` mit `pythonw.exe` verknüpfst, klappt es auch ohne mit Doppelklick im Explorer :-)
2025-04-25 08:56:35 +02:00
[🔝 ](#-inhalt-der-readme )
2025-04-21 21:32:41 +02:00
---
## 🌐 Zugriff im Browser
Sobald gestartet:
2025-03-12 22:21:30 +01:00
2025-04-21 21:32:41 +02:00
```https
2025-04-22 10:45:56 +02:00
https://< lokale-IP > :4443 (oder Port, der mit der option `--port` gestartet wurde)
2025-04-21 21:32:41 +02:00
```
2025-03-12 22:21:30 +01:00
2025-04-21 21:32:41 +02:00
Alternativ QR-Code scannen (GUI-Modus).
Dateien werden im `upload/<Client-IP>/` gespeichert.
2025-03-12 22:21:30 +01:00
2025-04-22 10:45:56 +02:00
Wichtig dabei ist es darauf zu achten, das tatsächlich auch https verwendet wird, falls man die Adresse händisch eingibt statt mit QR-Code! Man könnte noch zusätzlich einen http-server in der App laufen lassen, der dann automatisch umleitet, aber wir möchten das Programm so klein wie möglich halten.
2025-04-25 08:56:35 +02:00
[🔝 ](#-inhalt-der-readme )
2025-04-21 21:32:41 +02:00
---
2025-03-12 22:21:30 +01:00
2025-04-21 21:32:41 +02:00
## 📁 Logs & Uploads
2025-03-12 22:21:30 +01:00
2025-04-23 16:32:02 +02:00
- **Uploads**: im Ordner `upload/` nach Client-IP
- **Zentrale Logs**: `logs/pyupload.log`
- **Pro-Client Logs**: `logs/<Client-IP>.log`
2025-03-12 22:21:30 +01:00
2025-04-25 08:56:35 +02:00
[🔝 ](#-inhalt-der-readme )
2025-04-21 21:32:41 +02:00
---
2025-03-12 22:21:30 +01:00
2025-04-21 21:32:41 +02:00
## 🔐 Hinweis zur SSL-Zertifikatswarnung
2025-03-12 22:21:30 +01:00
2025-04-23 16:32:02 +02:00
⚠️ Beim ersten Aufruf im Browser erscheint möglicherweise eine Warnung wegen eines selbstsignierten SSL-Zertifikats. Das ist normal.
- Über ** „Erweitert“ > „Trotzdem fortfahren“** den Zugriff manuell freigeben
- Eigene Zertifikate in den Dateien `cert.pem` und `key.pem` hinterlegen
Damit dein Browser diese Warnung dauerhaft vermeidet, müssen die Zertifikate zu deiner verwendeten Domain passen.
Da das in lokalen oder testnahen Umgebungen in der Regel nicht der Fall ist, lässt sich diese Warnung meist nicht vermeiden.
2025-05-07 19:16:10 +02:00
> **Wichtig zu wissen:**
2025-04-23 16:32:02 +02:00
Die Verbindung ist trotzdem Ende-zu-Ende verschlüsselt. Die Schlüssel werden bei jedem Start lokal neu generiert – direkt auf deinem Rechner.
2025-04-25 08:56:35 +02:00
Technisch ist die Verbindung also sicher.
Dein Browser vertraut dem Zertifikat lediglich nicht, weil es nicht von einer offiziellen Zertifizierungsstelle stammt, sondern lokal erzeugt wurde.
2025-05-07 19:16:10 +02:00
TKinter unter Linux:
> **Hinweis für Linux-Benutzer:**
Falls die GUI nicht erscheint und stattdessen eine Warnung, wie `ModuleNotFoundError: No module named 'tkinter'` , liegt das daran,
dass `tkinter` unter Linux separat installiert werden muss.
Siehe Abschnitt [🐧 Für Linux / macOS ](#-für-linux--macos ) für Details.
2025-04-25 08:56:35 +02:00
[🔝 ](#-inhalt-der-readme )
2025-04-23 16:32:02 +02:00
---
## 💡 Ideen für zukünftige Entwicklungen
Hier sind einige Vorschläge für zukünftige Erweiterungen.
Dies ist eine offene Liste von Ideen für zukünftige Features oder Verbesserungen.
Beiträge willkommen!
2025-03-12 22:21:30 +01:00
2025-04-23 16:32:02 +02:00
- [ ] Link zum Server auf der GUI zum Testen klickbar.
- [ ] _____________________________________________________
- [ ] _____________________________________________________
2025-03-12 22:21:30 +01:00
2025-04-25 08:56:35 +02:00
[🔝 ](#-inhalt-der-readme )
2025-04-21 21:32:41 +02:00
---
2025-03-12 22:21:30 +01:00
2025-04-22 10:45:56 +02:00
## 🐛 Bekannte Bugs
- **Frontend:** wenn im Browser der Button Hochladen gewählt wird, OHNE das Dateien ausgewählt wurden,
2025-05-08 15:48:13 +02:00
kommt es zu einem *Error response - Error code: 400* im Browser.
Lösungsansatz wäre den Button über JS zu sperren solange keine Datei ausgewählt ist. Lässt sich schnell im [template ](./app/template.html ) erledigen.
2025-04-22 10:45:56 +02:00
2025-04-25 08:56:35 +02:00
Wenn jemand Lust und Zeit hat sich diesem anzunehmen, nur zu.
Ich danke im Voraus!
[🔝 ](#-inhalt-der-readme )
2025-04-22 10:45:56 +02:00
---
2025-04-23 16:32:02 +02:00
2025-05-08 15:43:17 +02:00
## 🤖 Autor und Beteiligte
2025-03-13 00:37:55 +01:00
2025-04-21 21:32:41 +02:00
- **Adam Skotarczak**
Kontakt: [adam@skotarczak.net ](mailto:adam@skotarczak.net )
GitHub: [realAscot ](https://github.com/realAscot )
2025-03-13 00:37:55 +01:00
2025-04-23 16:32:02 +02:00
- **Du?**
2025-04-25 08:56:35 +02:00
[🔝 ](#-inhalt-der-readme )
2025-04-21 21:32:41 +02:00
---
2025-03-13 00:37:55 +01:00
2025-05-08 15:43:17 +02:00
## ☕ Support
Wenn dir dieses Projekt gefällt, kannst du mich hier unterstützen:
☕ [paypal.me/AdamSkotarczak ](https://www.paypal.me/AdamSkotarczak )
---
2025-04-21 21:32:41 +02:00
## 📝 Lizenz
2025-03-12 22:21:30 +01:00
2025-04-25 08:56:35 +02:00
MIT [LICENSE ](./LICENSE ) – frei verwendbar in eigenen Projekten bei Namensnennung.