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:
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?