Uploadstatus mit Python über CGI

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
mettykayo
User
Beiträge: 3
Registriert: Sonntag 8. April 2007, 21:16

Guten Tag,

wie kann man den Uploadstatus mit Python rausfinden, wenn der Upload über ein ganz normale html-Formular geschickt wird?

Meine Idee war diese hier:
http://python.darktree.org/?paste:155

Der Status soll also in eine externe Datei geschrieben werden, die man auslesen kann. Das Problem ist jedoch, dass die Chunks erst nach dem Upload geschrieben werden und ich absolut keine Idee habe, wie man sonst an den Status des Uploads kommen kann.

Gibts irgendwie eine Möglichkeit die Temp-Dateien, wie beim Upload angelegt werden, abzugreifen, so dass man damit den Fortschritt bestimmen kann?

Ich hoffe ihr könnt mir da helfen. Bin leider was Python & CGI angeht nicht wirklich fit.

edit:
Was ich gerade noch zu dem Thema gefunden habe wäre das: http://pythonpaste.org/module-paste.pro ... ml#classes

Aber ich habe keine Ahnung, wie ich die Klassen verwenden sollte!

Vielen Dank schonmal und noch schöne Rest-Ostertage ;)

metty
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ich hatte in der Richtung auch mal was gemacht, siehe: http://www.python-forum.de/post-27009.html#27009

Ich weiß nicht mehr wie es ausgegangen ist, ich hab irgendwann einfach aufgehört. Generell geht es aber glaube ich schon, auch mit CGI...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
mettykayo
User
Beiträge: 3
Registriert: Sonntag 8. April 2007, 21:16

Das Problem für mich ist es halt, Informationen über den Upload während des Uploads zu bekommen.

Das jetztige Skript geht ja hin und schreibt den File erst nach dem Upload.

Wie kann ich denn direkt den http-File empfangen?

Versuche da gerade was mit "sys.stdin.read(1024*16)" aber Erfolg bringt mir das auch noch nicht gerade. Einer von euch da nen Tipp?

Danke!
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Wie ich in dem anderen Thread schon vermutet habe, kann es durchaus sein, das Apache erst dann das CGI Skript aufruft, wenn er die Request Daten vollständig empfangen hat. Ob das wirklich so ist, weiß ich aber nicht.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
mettykayo
User
Beiträge: 3
Registriert: Sonntag 8. April 2007, 21:16

so, habe jetzt mal folgendes ausprobiert:

Code: Alles auswählen

def writeStatus(fsize):
    fileHandle = open ( 'status/test.txt', 'w' )
    fileHandle.write ( str(fsize) )
    fileHandle.close()

f = open('files/tmp.tmp', 'w+')
while True:
    data = sys.stdin.read(1024*16) # read 64k at a time
    #print data
    if not data: break

    # status ueber den upload
    #print f.tell()
    writeStatus(f.tell())

    f.write(data)
    #f.flush() # so the ajax poller gets an accurate reading
    time.sleep(0.35)
    #f.seek(0)


f.close()

Bei dem Code wird die Datei geschrieben, während der Browser lädt. Geht also soweit schonmal. Die Frage ist jetzt aber, wie ich zeitgleich die Daten aus dem Skript ausbekomme, so dass ich Sie live auslesen kann. Das mit der test.txt als Statusdatei scheint mir noch nicht die optimale Lösung zu sein, weil ich mit einem zweiten Script diese Datei ausgeben müsste, die aber zu lange lädt, bis die erste Ausgabe kommt.

EDIT: ok geht defintiv nicht!!! Gibt es eine Möglichkeit live (also ohne Verzögerung) den Input auf das CGI-Skript mitzulesen?

Andere Idee?
Antworten