Seite 1 von 1

Dateien zum Download anbieten...

Verfasst: Montag 17. Oktober 2005, 13:44
von jens
Man kann ja eine Datei per CGI zum download anbieten, wenn man diese auf Dateisystem-Ebene öffnet und zum Browser schickt, so wie hier: http://www.python-forum.de/viewtopic.php?p=14631#14631

Im prinzip möchte ich das selbe machen, aber nicht auf Dateisystemebene. Kann man irgendwie einen Bestimmten http-Header generieren, das der Browser weiß welche Datei er runter laden soll??? Vielleicht igentwie mit "Location: " ?!?!

Ich möchte es nämlich nicht auf Dateisystemebene machen, weil ich den Pfad/Dateinamen per POST/Get Parameter bekomme. Somit kann man schnell auch andere Dateien erhalten, die nicht für den Download bestimmt war. Ich möchte auch keine "allow"-Liste führen.

Mit einem direkten Link ist es auch nicht getan, weil es ein Python-Skript ist, welches dann der WebServer versucht auszuführen, es aber dafür nicht gedacht ist :(

Verfasst: Montag 17. Oktober 2005, 15:26
von Leonidas
Das geht nicht, da der HTTP Server das Skript immer ausführt, bevor er es sendet. Du kannst eben höchstens die Datei durch ein anderes Script tunneln und dann im Tunnel den Header Content-Disposition setzen.
Alternativ änderst du die Konfiguration des Webservers, dass in bestimmten Ordnern Scripte nicht ausgeführt werden.

Verfasst: Montag 17. Oktober 2005, 15:37
von jens
Das tunneln will ich ja gerade nicht machen, s. erstes Posting...
Leonidas hat geschrieben:Alternativ änderst du die Konfiguration des Webservers, dass in bestimmten Ordnern Scripte nicht ausgeführt werden.
Das habe ich versucht, aber irgendwie hab ich das nicht gebacken bekommen:

Code: Alles auswählen

# http://httpd.apache.org/docs/2.0/mod/core.html#options
Options -ExecCGI

# http://httpd.apache.org/docs/2.0/mod/mod_mime.html#addtype
AddType text/plain .py
DefaultType text/plain

<Location /_Downloads>
    ForceType text/plain
</Location>
Er will dennoch das Skript ausführen... Eine doofe Möglichkeit ist das Skript BlaBla.py.txt zu benennen :(

Re: Dateien zum Download anbieten...

Verfasst: Montag 17. Oktober 2005, 20:02
von gerold
jens hat geschrieben:Mit einem direkten Link ist es auch nicht getan, weil es ein Python-Skript ist, welches dann der WebServer versucht auszuführen, es aber dafür nicht gedacht ist :(
Hi Jens!

Vielleich doch! Du könntest doch einen Download-Ordner über HTACCESS so einrichten, dass die Python-Skripte dieses Ordners nicht interpretiert werden.

http://httpd.apache.org/docs/2.0/howto/htaccess.html
http://httpd.apache.org/docs/2.0/howto/cgi.html
http://httpd.apache.org/docs/2.0/mod/core.html#options

Code: Alles auswählen

<Directory /usr/local/apache2/htdocs/somedir>
  Options -ExecCGI
</Directory>
lg
Gerold
:-)

Verfasst: Montag 17. Oktober 2005, 20:16
von gerold
Hi Jens!

Eine Alternative könnte sein, dass ein CGI-Skript den Header setzt, die zu übertragende Datei ausliest und zurück gibt. Gibt es bei CGI auch die Möglichkeit, einen Bytestream, statt mit "print" einen Text, zurück zu liefern?

http://www.dzug.org/mailinglisten/zope/ ... 3205707294

Daraus resultierender Pseudocode, da ich CGI nicht kenne:

Code: Alles auswählen

f = file("irgendeineDatei.pdf", "rb")
pdf = r.read()
RESPONSE.setHeader('content-type', 'application/pdf')
RESPONSE.setHeader('content-length', str(len(pdf)))
RESPONSE.setHeader('content-disposition', 'attachment; filename=seavas.pdf')
RESPONSE.write(pdf)
f.close()
lg
Gerold
:-)

Re: Dateien zum Download anbieten...

Verfasst: Montag 17. Oktober 2005, 20:31
von jens
Das hatte ich schon im Eingangsposting geschrieben, das das keine Lösung für mich ist:
jens hat geschrieben:Ich möchte es nämlich nicht auf Dateisystemebene machen, weil ich den Pfad/Dateinamen per POST/Get Parameter bekomme. Somit kann man schnell auch andere Dateien erhalten, die nicht für den Download bestimmt war. Ich möchte auch keine "allow"-Liste führen.

Ich bekomme es aber auch nicht hin, das der Webserver die Datei nicht ausführt...
Vielleicht ist der Dateinamen *.py.txt doch noch eine Option... Oder ich überleg mir das ganz anderes ;)

Re: Dateien zum Download anbieten...

Verfasst: Montag 17. Oktober 2005, 21:12
von gerold
jens hat geschrieben:Ich bekomme es aber auch nicht hin, das der Webserver die Datei nicht ausführt...
Hi Jens!

Falls die Verwendung von .htaccess-Dateien vom Provider erlaubt wurde, dann sollte es eigentlich keine große Sache sein.

1. Neue Datei mit dem Namen ".htaccess" innerhalb des Download-Ordners erstellen.
2. Leserecht für ALLE vergeben
3. .htaccess-Datei mit Inhalt füllen:
Das Einzige, was in dieser Datei stehen muss ist:

Code: Alles auswählen

Options -ExecCGI
Wenn das nicht geht, dann musst du wohl deinen Provider darum bitten, den Download-Ordner mit der "Directory"-Direktive als CGI-Ordner auszunehmen.

lg
Gerold
:-)

Verfasst: Dienstag 18. Oktober 2005, 06:24
von jens
Das hab ich auch probiert... Normalerweise kann ich .htaccess auch benutzen, aber in dem Fall scheint es nicht zu klappen :(

Verfasst: Donnerstag 20. Oktober 2005, 13:44
von Johi
vielleicht, dass du an die zu downloadenden dateien oben einen header anfügt, der die datei selbst nochmal einliest, den header abschneidet und dann an den browser schickt?