Python / cgi-bin: Dateiname extrahieren [solved]

Django, Flask, Bottle, WSGI, CGI…
Antworten
AngelusNoctis
User
Beiträge: 92
Registriert: Sonntag 16. Dezember 2007, 20:03

Hi

Vorab entschuldige ich mich falls ich in der falschen Kategorie bin.

Nun zum Problem:

Ich hätte ein kleines Feedbackformular bei dem man Bilder hochladen kann und das ganze dann per E-Mail zugestellt wird.
Das ganze funktioniert zwar, bis auf die Kleinigkeit, das der Bildername verloren geht und jedes Bild einfach "part_2.jpg" heisst.

Zwar sehe ich den Bildername in form['images'] (self=FieldStorage('images', 'Bild2.jpg', '\xff\xd8\xf...c\xbbh&\xce\xe6\x9aP\x8fz\xd2\xcc\xcaP?\xff\xd9') aber er lässt sich nicht extrahieren! Bei der Übergabe mit getvalues oder über den key verschwindet der Name?! Auch ein form['images'][1] funktioniert nicht.

form['images'][1] löst nen Fehler aus
form.getvalue('îmages')[1] gibt mir die einzelnen Zeichen der Binärdatei aus z.B. ÿ


Weiss jemand wie?

Hier der Code, jedoch ohne extraktion des Bildnamens!

Code: Alles auswählen

#!/usr/bin/python
import cgi, cgitb
import smtplib, email.utils
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart

cgitb.enable()

form = cgi.FieldStorage()

print "Content-Type: text/html"
print

receiver = 'info@foobar.ch'
sender = form.getvalue('email')
name = form.getvalue('name')
msg = form.getvalue('message')
subject = form.getvalue('subject')
image = form.getvalue('images') # Hier sollte ich irgendwie an den Bildname kommen, was aber nicht geht?!

if sender  == '':
    print 'Bitte E-Mail Adresse angeben'
elif name == '':
    print 'Bitte Name angeben'
elif msg == '':
    print 'Bitte Nachricht angeben'
else:
    try:
        message = MIMEMultipart()
        message['To'] = email.utils.formataddr(('Chipping', receiver))
        message['From'] = email.utils.formataddr((name, sender))
        message['Subject'] = subject
        message['Date'] = email.utils.formatdate(localtime=True)
        message.attach(MIMEText(msg))

        if image:
            img =  MIMEImage(image)
            img.add_header('Content-Disposition', 'attachment; filename="%s"' % filename) # Der Teil ist unvollständig da ich den Bildname nicht aus "form['images']" oder "form.getvalue('images')" bekomme
            message.attach(img)

        smtpObj = smtplib.SMTP('localhost')
        smtpObj.sendmail(sender, receiver, message.as_string())
        print 'E-Mail erfolgreich versendet'
    except smtplib.SMTPException:
        print 'Fehler: E-Mail konnte nicht versendet werden'



PS: Nein, es ist nicht möglich ein Framework
Zuletzt geändert von AngelusNoctis am Donnerstag 21. November 2013, 17:48, insgesamt 1-mal geändert.
BlackJack

@AngelusNoctis: In der Dokumentation zum `cgi`-Modul steht eigentlich relativ deutlich das `FieldStorage`-Objekte die hochgeladene Dateien repräsentieren ein `filename`- und ein `file`-Attribut besitzen. Also ``form['images'].filename`` sollte Dir eigentlich den Dateinamen liefern. Mit `getvalue()` geht das natürlich nicht weil dass das `value`-Attribut liefert und nicht das `FieldStorage`-Objekt.
AngelusNoctis
User
Beiträge: 92
Registriert: Sonntag 16. Dezember 2007, 20:03

BlackJack hat geschrieben:@AngelusNoctis: In der Dokumentation zum `cgi`-Modul steht eigentlich relativ deutlich das `FieldStorage`-Objekte die hochgeladene Dateien repräsentieren ein `filename`- und ein `file`-Attribut besitzen. Also ``form['images'].filename`` sollte Dir eigentlich den Dateinamen liefern. Mit `getvalue()` geht das natürlich nicht weil dass das `value`-Attribut liefert und nicht das `FieldStorage`-Objekt.
Vielen Danke :)
Antworten