Anfängerfrage zu Dateiupload per cgi

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
geogre
User
Beiträge: 41
Registriert: Mittwoch 20. April 2005, 13:26

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!
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ich denke du solltest mal hier im Forum nach "cgi" + "upload" suchen. Da ist bestimmt was dabei :?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
geogre
User
Beiträge: 41
Registriert: Mittwoch 20. April 2005, 13:26

... wie ich oben schon geschrieben habe, ich habe SEHR lange gesucht (auch hier im forum und auch nach cgi+upload), sicher ist irgendwo etwas dabei, aber ich habe es nicht gefunden, daher meine bitte um hilfe.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Und hiermit kannst du nicht's anfangen???

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
geogre
User
Beiträge: 41
Registriert: Mittwoch 20. April 2005, 13:26

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.

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'
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!!!
geogre
User
Beiträge: 41
Registriert: Mittwoch 20. April 2005, 13:26

ich hab jetzt immerhin rausgefunden, dass diese zeile

repl = path.replace('\\%#x27;, os.sep)

böse ist. was soll diese x27 geschichte??? danke für die aufklärung eines unwissenden ;)
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

TUFKAB – the user formerly known as blackbird
Antworten