Ideen für eine Art FTP-Server in Python

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
KlausHeinisch
User
Beiträge: 5
Registriert: Sonntag 20. August 2006, 02:51
Wohnort: Hannover

Hallo Leute im Forum.

Vorweg: Habe noch nicht viel Erfahrung in diesem Forum, ggf. müssten die
Admins diesen Thread auch verschieben.

Ich denke seit ein paar Tagen über ein Problem nach, das sich wie folgt
darstellt: Ich benötige für eine umfangreiche Web-Applikation (MoinMoin,
das Wiki, kennen ja viele) eine Art "Datei-Manager".

Ziel ist, dass man in ein relativ frei wählbaren Pfad einen Stapel Dateien
schieben kann, am Besten mit FTP oder auch mit SCP, je nachdem.

Man loggt sich mit seinem Usernamen ein, schiebt die Dateien an den Ort,
wo sie hin sollen. Alternativ könnte man das ganze auch als WebDAV-
Server realisieren und den Server mit dem Explorer verbinden (als
WebOrdner).
Idee ist: User schieben ihre Dokumente auf "den Server", egal ob
eine, zehn oder hundert Dateien, Ordner müssten (das ist wichtig)
auch möglich sein...

Ich komme auf das Problem, weil mich die Fähigkeiten von MoinMoin
stören, mit umfangreichen Anhängen umzugehen. Ich will nämlich
(zunächst firmen-intern) MoinMoin als Wissens-Wiki (kennen hier ja viele,
auch von wiki.python.org (Danke ;-) ) ) aufbauen, was aber teilweise
daran scheitert, dass MoinMoin bei Anhängen relativ unflexibel ist, wenn
es um vorhandene Dokumentation geht, die ja oft schon in
irgendeiner Form vorliegt (Hersteller-Doku, alte Files, hierarchische
Ordner etc. SelfHTML ist auch ein gutes Beispiel)...

Lange Rede:
Ich möchte die MoinMoin-Fähigkeiten erweitern, indem ich die
vorhandenen Features (User-Verwaltung, ACLs) nutze und die
Attachment-Funktion um den Aspekt des einfacheren Dokumenten-
Managements erweitere...

Jetzt seid ihr dran:
  • Welche vorhandenen Tools fallen euch ein?
  • Welche Ansätze würde man als erfahrenerer Entwickler (als ich) wählen?
  • Welche Fragen würdet ihr euch stellen?

Grüße, KlausHeinisch
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

KlausHeinisch hat geschrieben:
  • Welche vorhandenen Tools fallen euch ein?
Hallo Klaus!

Willkommen im Python-Forum!

Zu FTP fällt mir im Moment nur das ein:
http://twistedmatrix.com/documents/curr ... s.ftp.html

Ob man damit einen einfachen FTP-Server programmieren kann -- keine Ahnung.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
Blattlaus
User
Beiträge: 55
Registriert: Donnerstag 24. August 2006, 08:55

Der Knackpunkt an der Geschichte:
Wenn es eine Webapplikation ist, dann läuft sie im Kontext des Browsers. Der Browser kann mit der Applikation lediglich über HTTP kommunizieren, und die einzige möglich, wie man via HTTP Dateien in Richtung Server schieben kann ist via HTTP Post (genauer: über ein Form-Upload Feld), und das unterstützt bloß einzelne Dateien und keine Ordnerstrukturen.
Du kannst auch aus dem Browserkontext heraus nicht auf das Dateisystem zugreifen (und das ist auch gut so). Es gibt nur 2 möglichkeiten das zu schaffen: ActiveX Objekte und Java-Applets. Die können einen priviligierten Modus anfordern, den der User dann bestätigt...darüber könntest du dann alles machen was VB/.Net bzw. Java können, also auch Ordner hochladen usw.
Nachteil ActiveX: läuft bloß unter Windows
Nachteil Java: erfordert installiertes JRE und Java Plugin

Damit gelangt man zu dem Ergebnis, dass eine systemunabhängige und rein browserbasierte Lösung nicht in Frage kommt. Wenn das also der Fall ist, und man somit bestimmte Software auf dem Client voraussetzt, braucht man nicht basteln, sondern kann gleich etablierte Dinge wie WebDAV oder FTP benutzen.

Man könnte es z.b. so machen:
- User geht auf Uploadseite
- Uploadseite stößt Script an
- Script erzeugt ein Verzeichnis auf dem FTP, legt die IP als Benutzer an
- Script zeigt info an wohin sich der User verbinden soll
- User tranferiert die Dateien über ein FTP-Programm
- Script nutzt Meta Refresh um sich neu zu laden (oder pollt wie asychrones XHTTP ein andere Script) und zeigt dann die bisher hochgeladenen Dateien an
- Wenn der User fertig ist, klickt auf auf "fertig" und der User wird aus dem FTP entfernt
- Rest der Dateivrewatlung (Metadaten eintragen, ec) läuft alles über Script
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Blattlaus hat geschrieben:sondern kann gleich etablierte Dinge wie WebDAV oder FTP benutzen.
Hallo Blattlaus!

Ich glaube, dass Klaus das ja auch machen möchte. Nur denke ich, dass er das FTP-Protokoll direkt in die WIKI-Software einbauen möchte, so wie es z.B. bei Zope der Fall ist.

Man kann sich bei Zope, wenn aktiviert, direkt per FTP zum Zope-Server verbinden und Dateien in die Zope-Datenbank hochladen. Das sieht für den FTP-Client wie ein normales Dateisystem aus.

Die neuesten Zope-Versionen nutzen Twisted. Also denke ich, dass auch ein "virtueller" FTP-Server mit Twisted programmiert werden könnte. Allerdings kenne ich Twisted nicht und kann zu diesem Punkt nur spekulieren.

Aber als Hinweis für den OP: Zope kann das schon. Vielleicht guckst du dir dort ab, wie die das gemacht haben.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Blattlaus hat geschrieben:die einzige möglich, wie man via HTTP Dateien in Richtung Server schieben kann ist via HTTP Post (genauer: über ein Form-Upload Feld), und das unterstützt bloß einzelne Dateien und keine Ordnerstrukturen.
Falsch. WebDAV ist eine Erweiterung des HTTP-Protokolls das noch mehr möglichkeiten hat. Allerdings benötigt man dafür einen CLient der mit WebDAV umgehen kann.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
KlausHeinisch
User
Beiträge: 5
Registriert: Sonntag 20. August 2006, 02:51
Wohnort: Hannover

Hi zusammen.

@Leonidas:
An WebDAV hatte ich teilweise gedacht, weil der Windows-Explorer ja
wohl (mit Internet-Explorer) WebDAV-fähig ist unter Win-XP...

@gerold & Blattlaus:
Im Grunde kommt das, was Gerold zu Zope schrieb, meiner Vorstellung
schon relativ nahe:
Gerold hat geschrieben: Nur denke ich, dass er das FTP-Protokoll direkt in die WIKI-Software
einbauen möchte, so wie es z.B. bei Zope der Fall ist.
  • Ich brauche tatsächlich soetwas wie ein virtuelles File-System, in
    das sich der FTP-Client "browst".
  • Allerdings würde ich meine "Datenbank" wiederum -auch aus
    Performance-Gründen wie bei MoinMoin üblich im Filesystem liegen
    haben und nicht mit einer extra-DB-Datei versehen.
An twisted hatte ich auch schon gedacht, aber leider noch keine
Erfahrungen damit. Und tatsächlich werde ich mir wohl die aktuellen
Zope- und twisted-Sourcen laden (müssen :-( ), damit ich nicht das Rad
neu erfinden muss.
Was wiederum enorm Zeit sparen würde ( ;-) )

Tatsächlich handelt sich ja dieser Thread um die Frage, ob ihr ein
ähnliches Rad schon kennt...

Gruß, Klaus
dev
User
Beiträge: 49
Registriert: Montag 23. Januar 2006, 09:52
Kontaktdaten:

KlausHeinisch hat geschrieben: An twisted hatte ich auch schon gedacht, aber leider noch keine
Erfahrungen damit.
Nach diesem
Eintrag auf der Twisted ML sollte sich damit nicht nur ein einfacher FTP-Server realisieren lassen.

Für WebDAV mußt Du twisted.web2, es gibt da derzeit einen Branch an dem exzessiv bzgl. WebDAV gearbeitet wird.

Ciao,
dev
Antworten