Multiple FileUpload ohne file="type" möglich ???
Verfasst: Montag 26. Mai 2008, 16:01
Hallo,
ich weiß, dass Thema wurde schon oft genannt, jedoch habe ich für mein Problem noch keine Lösung in eurem Forum gefunden, daher hier einmal meine Frage:
Ist es möglich einen FileUpload zu machen ohne ein Input-Feld "type" ?
Ich arbeite mit TurboGears und Python 2.5 und habe dazu ein kid.template gebaut, welches mit Javascript eine art mehrfachuplod darstellen soll. Das geht dann so, dass es ein Input-Feld type="file" gibt und der User dort eine Datei auswählt und auf hinzufügen drückt. Jetzt wird kein submit gemacht, sondern über javascript die Datei in nem Hiddenfeld gespeichert und der User kann weitere Dateien hinzufügen (über das eine Input-Feld). Wenn er fertig ist, dann klickt er auf Uploaden und es wird ein submitted. Ich habe alles soweit hinbekommen, habe in der controller.py alle Dateien inkl. vollständigem Pfad usw. da, nur diese sind natürlich kein Objekt, also bekomme ich eine Fehlermeldung, wenn ich über
darauf zurgreifen möchte, da dieses Objekt ja auch keine file-methode hat. Ich habe eine Schleife usw. und alles funktioniert wunderbar nur eben das auslesen der Dateien klappt nicht. Wenn ich versuche einen cast zu machen und schreibe... (aFiles[] ist die Liste der übergebenen Dateien)
legt er mir sogar die Dateien auf dem Server an, nur sind die hinterher nicht mehr zu gebraucht, egal ob Bild, Archiv oder pdf, es muss alles gehen.
Hier der Code meiner Upload-Funktion:
Ich bin wirklich für jede Hilfe sehr dankbar, vielleicht habe ihr auch ein paar Ideen zu Work-Arounds, alles kann helfen.
Danke,
Lg Manu
ich weiß, dass Thema wurde schon oft genannt, jedoch habe ich für mein Problem noch keine Lösung in eurem Forum gefunden, daher hier einmal meine Frage:
Ist es möglich einen FileUpload zu machen ohne ein Input-Feld "type" ?
Ich arbeite mit TurboGears und Python 2.5 und habe dazu ein kid.template gebaut, welches mit Javascript eine art mehrfachuplod darstellen soll. Das geht dann so, dass es ein Input-Feld type="file" gibt und der User dort eine Datei auswählt und auf hinzufügen drückt. Jetzt wird kein submit gemacht, sondern über javascript die Datei in nem Hiddenfeld gespeichert und der User kann weitere Dateien hinzufügen (über das eine Input-Feld). Wenn er fertig ist, dann klickt er auf Uploaden und es wird ein submitted. Ich habe alles soweit hinbekommen, habe in der controller.py alle Dateien inkl. vollständigem Pfad usw. da, nur diese sind natürlich kein Objekt, also bekomme ich eine Fehlermeldung, wenn ich über
Code: Alles auswählen
aktFile.file.read()
Code: Alles auswählen
aktFile = file(aFiles[i])
total_data=""
while True:
data = aktFile.file.read()
if not data:
break
total_data += data
Hier der Code meiner Upload-Funktion:
Code: Alles auswählen
def do_upload(self, **keywords):
form_group_id = keywords['form_group_id']
form_praktikum = keywords['form_praktikum']
form_versuch = keywords['form_versuch']
form_delivery_id = keywords['form_delivery_id']
files_2_upload = keywords['files_2_upload']
amount_files = keywords['amount_files']
kommentar = keywords['kommentar']
if (amount_files > 0):
""" Trenne Dateien nach | """
aFiles = files_2_upload.split("|")
sAusgabe = ""
""" Ueberpruefe Zielpfad und erstelle ggf. """
if not os.path.exists(UPLOAD_DIR + "\\" + form_praktikum):
os.makedirs(UPLOAD_DIR + "\\" + form_praktikum)
if not os.path.exists(UPLOAD_DIR + "\\" + form_praktikum + "\\" + form_versuch):
os.makedirs(UPLOAD_DIR + "\\" + form_praktikum + "\\" + form_versuch)
""" Uebergebe Zielpfad """
target_path = UPLOAD_DIR + "\\" + form_praktikum + "\\" + form_versuch
""" Hole Timestamp """
aktDateTime = datetime.datetime.now()
sTimeStamp = aktDateTime.strftime("%Y%m%d%I%M%S_")
for i in range(0,len(aFiles)-1):
""" Filtere den Dateinamen raus """
sFileName = sTimeStamp + aFiles[i][aFiles[i].rfind("\\")+1:len(aFiles[i])]
sAusgabe = sAusgabe + "Files: %s <br>" % (sFileName)
""" ******* HIER BRAUCHE ICH EINE METHODE ZUM AUSLESEN EINER DATEI ******* >>>"""
aktFile = file(aFiles[i])
total_data=""
while True:
data = aktFile.file.read()
if not data:
break
total_data += data
""" <<< ******* HIER BRAUCHE ICH EINE METHODE ZUM AUSLESEN EINER DATEI ******* """
target_file_name = os.path.join(os.getcwd(), target_path, sFileName)
""" open file in binary mode for writing """
f = open(target_file_name, 'wb')
f.write(total_data)
f.close()
return sAusgabe
Danke,
Lg Manu