mod_python download filename

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
taake
User
Beiträge: 125
Registriert: Donnerstag 14. Oktober 2010, 08:49

Moin,

ich hätte da mal wieder ne Frage.
Hab mir für meinem Server mit mod_python was kleines gebastelt womit man Dateien hochladen kann und mit spezielem code auch wieder downloaden kann.
Klappt soweit auch alles ganz gut, allerdings gibt es beim download der Dateien ein Problem, der Dateiname wird nach dem ersten space verstümmelt.

Code: Alles auswählen

from mod_python import apache
import os
fpath = (os.path.join( str(rootpath) , str(fhex) ))
if os.path.exists( fpath ) == True:
   for filen in os.listdir ( fpath ):
      targetf = (os.path.join ( fpath, filen ))
      req.set_content_length(os.path.getsize( targetf ))
      req.headers_out["Content-Disposition"] = "attachment; filename =%s" % targetf.split('/')[-1]
      req.content_type = 'text/plain'
      req.sendfile( targetf , 0 , -1 )
else:
   ErrorMsg = 'Invalid or Empty Download Code'
Kann mir jemand mal nen Tipp geben wie ich es hinbekomme das apache beim download den ganzen dateinamen übergibt?

Danke
JonasR
User
Beiträge: 251
Registriert: Mittwoch 12. Mai 2010, 13:59

Vielleicht ein bisschen genauer? Dateiname vorher und nachher wäre schonaml ein Anfang
taake
User
Beiträge: 125
Registriert: Donnerstag 14. Oktober 2010, 08:49

Oh okay, dann mal ein Beispiel:

'/rootpath/fhex/dies ist ein test.txt'

wenn ich die datei anfordere gibt mir apache zwar die korrekte datei allerdings mit dem dateinamen 'dies'
und nicht 'dies ist ein test.txt'

Wenn die Datei nun dies_ist_ein_test.txt heißt klappt natürlich alles.
der Dateiname wird wie geschrieben nach dem ersten space abgebrochen.
lunar

@taake mod_python ist veraltet, und wird nicht mehr unterstützt. Verwende ein Python-Framework mit WSGI-Anbindung (z.B. flask) und nutze mod_wsgi oder ähnliches zur Anbindung an den Webserver. Du musst auch nicht Apache zur Entwicklung verwenden. Jedes Framework bringt einen eigenen Server zur Entwicklung mit.
JonasR
User
Beiträge: 251
Registriert: Mittwoch 12. Mai 2010, 13:59

Hör am besten auf Lunar.
Ich will dir aber trozdem eine Antwort auf die Frage zu geben, da ich nicht denke das sich das Grundlegende Problem mit einem Framework löst.

Leerzeichen in Dateinamen sind generell immer schlecht ;) Du solltest den Dateinamen escapen, musst mal mit urllib.quote und urllib.unquote rumspielen.
taake
User
Beiträge: 125
Registriert: Donnerstag 14. Oktober 2010, 08:49

Vielen Dank für die Info, das es deprecated ist wusste ich, allerdings nicht das es irgendwelchen ersatz dafür gibt, deshalb hab ich mod_python benutzt.

Werde mir flask mal anschauen, klingt fast so als würde es da mehrere optionen geben sowas zu händeln?
Muss ich denn den webserver des frameworks nutzen oder kann ich den in apache einbinden?
Weil apache läuft eh auf der kiste da würde es sich aus meiner sicht zumindest anbieten wenn möglich den dort einzubinden.

Und dann auch gleich mal die Frage obs da ein empfehlenswertes tut gibt um den Einstieg zu erleichtern?

Und danke für den Tipp mit urllib.quote und urllib.unquote @JonasR
Ja leerzeichen sind wirklich böse, hatte schon überlegt die direkt beim hochladen durch unterstriche zu ersetzen, aber das wäre nur ein ziemlich dreckiger fix gewesen.
lunar

@taake Es gibt natürlich diverse Frameworks, doch die meisten, insbesondere die eher exotischen, kannst Du für den Anfang getrost ignorieren. Nutze Flask, wenn Du vieles selbst entwickeln möchtest, oder Django, wenn Du auf viele fertige Komponenten zurückgreifen möchtest. Ich rate Dir zu letzterem.

Ich rate Dir auch, zur Entwicklung der Anwendung den Webserver des Rahmenwerks zu nutzen, da dessen Nutzung einfacher ist, inklusive der Möglichkeit, geänderte Dateien automatisch neu zu laden, und diese Webserver das Debugging unterstützt. Das geht so weit, dass Du Python-Ausnahmen direkt im Browser debuggen kannst. Mit einem Webserver siehst Du in diesem Fall höchstens eine generische Fehlerseite, und darfst dann mühsam die Log-Dateien durchsuchen. Einen vollwertigen Webserver verwenden man in der Regel nur beim Deployment der Anwendung, also beim produktiven Einsatz.

Ich weiß nicht, warum auf Deinem Entwicklungssystem Apache läuft, doch für mich lesen sich Deine Beiträge, als würdest auf Erfahrung mit PHP zurückgreifen. Falls dem so ist, dann rate ich Dir schlussendlich: Vergiss alles, und zwar wirklich alles, was Du in PHP über Webentwicklung gelernt hast. Die Unterschiede sind gewaltig. Lerne Webentwicklung in Python von Grund auf.
taake
User
Beiträge: 125
Registriert: Donnerstag 14. Oktober 2010, 08:49

Danke ich werde mir Flask ansehen, geht immerhin darum den kram auch wirklich zu lernen django klingt eher nach config dateien anpassen.
Ne hab kaum php Erfahrungen, abgesehen von ein paar "muss mal schnell angepasst werden" mag php nicht und kann auch den hype um diese sprache nicht wirklich nachvollziehen.

Mein Entwicklungssystem ist auch gleichzeitig das Produktivsystem, kleiner rootserver der ein paar webservices für eine sehr begrenzte anzahl an usern zur verfügung stellen soll.
Daher ist es nicht wirklich relevant dass das system sofort so läuft wie es soll.

Danke für die guten Infos ^^


//taake
lunar

@taake Entwicklung auf dem Produktivsystem ist mit der größte Fehler, den Du bei der Webentwicklung machen kannst, umso mehr als dieses System offensichtlich auch noch von außen zu erreichen ist. Entwickle und teste auf einem separate System, und installiere nur funktionierende Versionen Deiner Anwendung auf dem Produktivsystem.
Antworten