[Python] mod_python
Manlio Perillo
manlio_perillo a libero.it
Lun 23 Giu 2008 18:10:19 CEST
Cristian Re ha scritto:
> ciao a tutti ho la necessità di realizzare uno script che effettui il
> download di files di svariato tipo, musicali, immagini, testo ecc ecc
> con mod_python ma non riesco a capire se è fattibile e come.
>
Dal codice non mi sembra proprio che tu stia facendo un download; tu
vuoi servire un file.
Comunque: la documentazione di mod_python l'hai letta?
> Fin'ora ho sempre effettuato queste operazioni tramite cgi in python con
> il seguente codice:
> naturalmente modificando il Content-Type in base al tipo di file da
> scaricare.
>
>
> print 'Content-Type: x-music/x-midi'
> print 'Content-Disposition:attachment; filename=filename'
> print 'Content-Length: %s' % os.path.getsize(path)
> print
>
> a = msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
>
> while True:
> chunk = f.read(8192) # segments of 8192 bytes
> if not chunk: # if end of file
> break
> sys.stdout.write(chunk) # send segment
> sys.stdout.flush() # flush
>
> f.close()
>
Ti consiglio di lasciar stare mod_python, ed usare invece mod_wsgi.
In questo modo puoi fare:
def application(environ, start_response):
headers = [
('Content-Type', 'x-music/x-midi'),
('Content-Disposition', 'attachment; filename=filename'),
('Content-Length', '%s' % os.path.getsize(path))
]
start_response('200 OK', headers)
f = file(path, 'rb')
return environ['wsgi.file_wrapper'](f, 8192)
Maggiori informazioni qui: http://python.org/dev/peps/pep-0333/
Questo codice non solo è più "semplice" rispetto all'equivalente in
mod_python, ma è anche portabile ad altri server (con una minima
modifica dati che wsgi.file_wrapper è opzionale e non tutti lo
implementano).
P.S.: ma hai davvero bisogno di servire tu il file invece di lasciarlo
fare ad Apache?
P.S.2: se non puoi usare mod_wsgi, anche mod_python ha il supporto per
l'invio diretto di files: request-sendfile(path[, offset, len]):
http://www.modpython.org/live/current/doc-html/pyapi-mprequest.html
Saluti Manlio Perillo
Maggiori informazioni sulla lista
Python