hallo,
ich bin (leider immernoch;) ein python-newbie, ich weiß auch das meine frage sicher sehr einfach und möglicherweise blöd ist, aber ich habe gerade etwa zwei stunden mit googeln und suche hier im forum verbracht und mag jetzt nicht mehr
also:
ich habe ein html-formular und möchte texteingaben machen, radiobutton-auswahlen und dergleichen und auch ein feld für einen dateiupload gibt es:
<input name="a_06_01_file" id="a_06_01" type="file" size="50" />
das ganze formular wird so übermittelt:
<form enctype="application/x-www-form-urlencoded" method="POST" action="cgi-bin/test.py">
im py-script soll die datei dann irgendwie ankommen um gespeichert werden zu können... das hab ich mir so (gekürzt) zusammengebastelt:
import cgitb
import cgi
cgitb.enable()
form = cgi.FieldStorage()
if form.has_key("a_06_01_file"):
file = form["a_06_01_file"]
data=file.file
print "<p>file="
print file
print "<br>data="
print data
print "</p>"
als ausgabe bekomme ich leider nur folgendes:
file= MiniFieldStorage('a_06_01_file', 'beispielbild.jpg')
data= None
also enthält dieses minifieldstorage wohl nur einen string mit dem namen, komplett ohne pfad? irgendwo anders im forum habe ich gelesen, dass jemand mit der gleichen methode einen riesensatz an 'data' bekommen hat, warum krieg ich nur 'None' ?
danke für hilfe!
Anfängerfrage zu Dateiupload per cgi
doch! super, habe viel daraus gelernt. ich hatte ja schon nicht den richtigen 'enctype'...
jetzt krieg ich die daten alle übermittelt, das
form = cgi.FieldStorage()
enthält offenbar auch die daten der hochgeladenen datei. den rest des skriptes aus dem empfohlenen thread (s.u.) verstehe ich leider nicht ganz.
ich habe versucht, das mit entspr. daten und verzeichnissen anzupassen, aber ich bekomme immer nur einen internal server error vom apache.
kann ich, da ich die datei ja schon im form-objekt habe, diese nicht irgendwie mit datei.write("inhalt aus dem formobjekt") abspeichern? warum muss das per ftp laufen wenn die daten doch schon auf dem server sind? speziell diese zeilen
conn = ftplib.FTP('ftp-gateway.de','user','passwd')
conn.cwd('/public_html/cgi-bin/pics/')
repl = path.replace('\\%#x27;, os.sep)
conn.storbinary('STOR %s' % serverf2, fileobj)
verstehe ich daher leider gar nicht. auch wenn es eine etwas blöde frage ist, aber könnte mir das jemand erklären?
tausend dank
tausend dank auch für den tipp mit dem thread!!!
jetzt krieg ich die daten alle übermittelt, das
form = cgi.FieldStorage()
enthält offenbar auch die daten der hochgeladenen datei. den rest des skriptes aus dem empfohlenen thread (s.u.) verstehe ich leider nicht ganz.
Code: Alles auswählen
#!/usr/bin/python
import cgi
import ftplib
import os.path
import os
import cgitb
import PIL
cgitb.enable()
form = cgi.FieldStorage()
data_of_file = form["file"]
fileobj = form["file"].file
print "Content-Type : text/html"
print
#fsize = len(data_of_file.value)
#if fsize > 60000 :
#print "Content-Type : text/html"
#print
#print 'The file is too big'
ending = os.path.splitext(data_of_file.filename)
if ending[1] in ('.jpeg', '.jpg', '.png'):
dict = 'pics'
list = os.listdir(dict)
print list
count = str(len(list) + 1)
conn = ftplib.FTP('ftp-gateway.de','user','passwd')
conn.cwd('/public_html/cgi-bin/pics/')
serverf2 = count+'.pic'
repl = path.replace('\\%#x27;, os.sep)
conn.storbinary('STOR %s' % serverf2, fileobj)
else :
print "Content-Type : text/html"
print
print 'JPEG and PNG only'
kann ich, da ich die datei ja schon im form-objekt habe, diese nicht irgendwie mit datei.write("inhalt aus dem formobjekt") abspeichern? warum muss das per ftp laufen wenn die daten doch schon auf dem server sind? speziell diese zeilen
conn = ftplib.FTP('ftp-gateway.de','user','passwd')
conn.cwd('/public_html/cgi-bin/pics/')
repl = path.replace('\\%#x27;, os.sep)
conn.storbinary('STOR %s' % serverf2, fileobj)
verstehe ich daher leider gar nicht. auch wenn es eine etwas blöde frage ist, aber könnte mir das jemand erklären?
tausend dank
tausend dank auch für den tipp mit dem thread!!!