Seite 1 von 1

CGI FileBrowser (dynamische Download Seite)

Verfasst: Mittwoch 6. Juli 2005, 09:46
von jens
Hab ein neues Projekt angelegt und es mal vollmundig "PyFileCenter" genannt ;)

Eigentlich ist aber nur der FileBrowser fertig :lol:

Der FileBrowser erzeugt per CGI eine Download-Seite. Ein Beispiel:
http://www.jensdiemer.de/Programmieren/

Als Gimmick wird für jede Datei Informationen mittels Linux file Befehl eingeblendet.
Damit man den FileBrowser an verschiedenen Stellen (also verschiedene Basis-Verzeichnisse) seiner Webseite benutzen kann, wird er über eine KonfigurationsDatei (index.py) aufgerufen.
Diese Datei speicher ich als index.py in dem Basisverzeichnis des FileBrowsers. In meinem Beispiel von oben also /Programmieren/index.py
Dabei sollte Apache's DirectoryIndex Directive so konfiguriert sein, das die index.py als Index des Verzeichnisses nimmt.


index.py

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: UTF-8 -*-


print "Content-Type: text/html\n"
import cgitb; cgitb.enable()
import os, sys

sys.path.insert( 0, os.environ["DOCUMENT_ROOT"] + "cgi-bin/PyFileCenter/" )
import FileBrowser


filebrowser_cfg = {
    # Nur Endungen anzeigen, die in der Liste vorkommen
    "ext_whitelist":    (".7z",".zip",".py"),

    # Hauptverz.: Navigation nur innerhalb diese Verz. mit Unterverz. erlauben
    "base_path":        "Programmieren",

    # Verz. in der Liste auslassen:
    "dir_filter":       ( "OLD", ),

    # Dateien die nicht angezeigt werden sollen
    "file_filter":       ( "index.py", ),

    # =False -> Nur Dateien im aktuellen Verz. anzeigen
    "allow_subdirs":    True,
    #~ "allow_subdirs":    False,
}


FileBrowser.FileBrowser( filebrowser_cfg )

Der Sourcecode kann unter http://www.jensdiemer.de/?PyFileCenter eingesehen und runtergeladen werden...

Verfasst: Mittwoch 6. Juli 2005, 12:42
von Leonidas
Sehr interessant, aber dann muss in jedem Ordner eine index.py sein (ggf. als Symlink), oder kann man das irgendwie in den Apachen einhacken, dass es auch nur mit einer Kopie geht?

Der Universal-MIME-Typ könnte application/octet-stream sein..

Verfasst: Mittwoch 6. Juli 2005, 13:07
von jens
Mime-type habe ich eingetragen - Danke... Wobei das leider bei *.py Dateien auch nicht hilft, da der Server diese so oder so als CGI Ausführen will... Das könnte man natürlich mit einem Options -CGIexe oder so ähnlich abstellen, ist aber irgendwie doof...

Die "index.py" Konfigurationsdatei stellt sowas ähnliches dar, wie Apache's .htaccess Datei... Die muß immer individuell "eingerichtet" werden...
Das ganze hat den Sinn, das man mehrere individuelle zu konfigurierende Download-Bereiche gleichzeitig betreiben kann.

Verfasst: Mittwoch 6. Juli 2005, 13:23
von Leonidas
jens hat geschrieben:Das ganze hat den Sinn, das man mehrere individuelle zu konfigurierende Download-Bereiche gleichzeitig betreiben kann.
Klar, aber wenn ich das Directory Listing mod_dir des Apachen generell ersetzen möchte ist das etwas unpraktisch ;)

Verfasst: Mittwoch 6. Juli 2005, 13:39
von jens
Das hatte ich eigentlich nicht vor ;) Soll ein einfaches CGI bleiben...

Verfasst: Mittwoch 6. Juli 2005, 14:13
von jens
Nun gibt es einen neuen Konfigurationsparameter:

Code: Alles auswählen

    # =True -> User kann in ZIP Archiven reinsehen
    "allow_zipview"     : True
Kann man hier ansehen:
http://www.jensdiemer.de/Programmieren/?path=PyAdmin

Verfasst: Mittwoch 6. Juli 2005, 19:53
von jens
Hab die ganze Konfiguration geändert... Nun ist es die pseudo Klasse cfg...
Meine index.py sieht dann so aus:

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: UTF-8 -*-


print "Content-Type: text/html\n"
import cgitb; cgitb.enable()
import os, sys

# Verzeichnis in dem sich "FileBrowser.py" befindet in den Suchpfad aufnehmen
sys.path.insert( 0, os.environ["DOCUMENT_ROOT"] + "cgi-bin/PyFileCenter/" )

import FileBrowser



# Nur Endungen anzeigen, die in der Liste vorkommen
FileBrowser.cfg.ext_whitelist   = [ ".7z", ".zip", ".py" ]

# Hauptverz.: Navigation nur innerhalb diese Verz. mit Unterverz. erlauben
FileBrowser.cfg.base_path       = "Programmieren"

# Verz. in der Liste auslassen:
FileBrowser.cfg.dir_filter      = ["OLD"]

# Dateien die nicht angezeigt werden sollen
FileBrowser.cfg.file_filter     = ["index.py"]

# =False -> Nur Dateien im aktuellen Verz. anzeigen
FileBrowser.cfg.allow_subdirs   = True

# =True -> User kann in ZIP Archiven reinsehen
FileBrowser.cfg.allow_zipview   = True

# zurück-Link der auf jeder Seite eingeblendet werden soll
FileBrowser.cfg.backlink = {
        "txt"   : "< zurück zur Homepage",
        "url"   : "http://www.jensdiemer.de/"
    }

# Verzeichnis bezogene zurück-Links
FileBrowser.cfg.dir_backlinks = {
    "PyAdmin"       : ["< PyAdmin Projektseite",        "/?PyAdmin"],
    "PyDiskEraser"  : ["< PyDiskEraser Projektseite",   "/?PyDiskEraser"],
    "PyLucid"       : ["< PyLucid Projektseite",        "/?PyLucid"]
}

# Nur ein zurück einblenden
FileBrowser.cfg.only_one_backlink = True

# HTML-Head
FileBrowser.cfg.html_head["robots"] = "index,follow"



# Starten...
FileBrowser.FileBrowser()
Das ganze hat einen großen Vorteil bei der "Auswertung" der Konfiguration... Verher habe ich immer es mit z.B. if self.cfg.has_key("XY") and self.cfg["XY"] == False: arbeiten müßen... Nun sind alle "Parameter" vordefiniert, können also garnicht fehlen... Somit entfällt überall das .has_key()...

Aktuelle Source: http://www.jensdiemer.de/?PyFileCenter

Verfasst: Mittwoch 6. Juli 2005, 21:29
von jens
jens hat geschrieben:Mime-type habe ich eingetragen - Danke... Wobei das leider bei *.py Dateien auch nicht hilft, da der Server diese so oder so als CGI Ausführen will... Das könnte man natürlich mit einem Options -CGIexe oder so ähnlich abstellen, ist aber irgendwie doof...
Ich hab jetzt einen "Download Proxy" programmiert... Die Daten einer Skriptdatei wird dabei direkt gelesen und mit einem richtigen Header an den Browser geschickt...
Umständlich, aber so geht's...

Außerdem hab ich den Code etwas aufgeräumt...

Verfasst: Donnerstag 14. Juli 2005, 07:51
von jens
Hab das ganze nochmals ausgebaut... Nun zeigt es auch Thumbnails an...

Wie sowas aussieht könnt ihr hier http://www.jensdiemer.de/_Bilder/_publi ... ere_Katzen nachsehen...

Es ist das selbe Skript, welches auch http://www.jensdiemer.de/_Downloads/Programmieren/ zur verfügung stellt ;)

Der Download der sourcen unter
http://www.jensdiemer.de/Programmieren/ ... FileCenter

Verfasst: Dienstag 20. September 2005, 17:50
von Johi
auch wenn das vielleicht nicht hier rein gehört: Can't use textile-Markup (maximum recursion limit exceeded)
auf http://www.jensdiemer.de/Programmieren/ ... FileCenter
:)

Verfasst: Mittwoch 21. September 2005, 06:17
von jens
Danke für den Hinweis. Hab gleich mal ein Bug Request geschrieben: https://sourceforge.net/tracker/index.p ... tid=764837

EDIT: So, in der CVS Version ist es jetzt gefixed.