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 _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python