flask-uploads und Field Enclosures

Django, Flask, Bottle, WSGI, CGI…
Antworten
paddie
User
Beiträge: 103
Registriert: Donnerstag 11. Oktober 2018, 18:09

Hi,

Ich baue versuche grad ein kleines Flaskprogramm zu schreiben. Jetzt stoße ich allerdings auch ein Problem, wo ich keine Lösung finde (vielleicht suche ich auch nur nach den falschen Begriffen :-/)

In einem Form haben ich ein FileField

Code: Alles auswählen

    ...
    product_image = FileField('Produkt-Bild', validators=[FileAllowed(product_photos, 'Es sind nur Bilder erlaubt')])
    ...
das speichere ich mittels:

Code: Alles auswählen

    ...
    product_photo_path = product_photos.save(request.files['product_image'])
    ...

In einem anderen Form habe ich ein FileField in einer FieldList welches ich in ein FlaskForm einfüge, was auch funktioniert...sprich, es wird wenigstens schonmal im Browser gerendert ;-).

Code: Alles auswählen

class LampPower(Form):
    ...
    ...
    photometric_data = FileField('LDTF- oder IES-Datei', validators=[FileAllowed(photometric_data, 'Es sind nur LDT- oder IES-Dateien erlaubt')])

Code: Alles auswählen

class NewProductStep3(FlaskForm):

    lamp_power = FormField(LampPower, label='Lichtfarbe')
    ...
    ...
In meiner __init__.py sind meine UploadSets so eingerichtet:

Code: Alles auswählen

product_photos = UploadSet('productphotos', IMAGES)
photometric_data = UploadSet('photometricdata', extensions=('ldt', 'ies'))
Mein Problem jetzt: ich kann nicht auf auf das FileField zugreifen. Mit dem Namen des UploadSet und auch mit dem Namen der im "HTML-Code" steht gehts auf jeden Fall nicht :-)...

wenn ich den Namen des FileFields nehme (wie ich es bei dem funktionierenden Beispiel mache) bekomm ich folgende Fehlermeldung:

Code: Alles auswählen

werkzeug.exceptions.BadRequestKeyError: 400 Bad Request: The browser (or proxy) sent a request that this server could not understand.
KeyError: 'photometric_data'
Hier ist mir aber irgendwie auch klar, dass es so nicht funktionieren kann. Da ich ja auch mehrere FieldLists haben kann (was ich ja auch in einigen Fällen möchte)...

Wenn ich den Name nehme, der im HTML-Code steht kommt folgendes

Code: Alles auswählen

flask.debughelpers.DebugFilesKeyError: You tried to access the file "lamp_power-photometric_data" in the request.files dictionary but it does not exist.  The mimetype for the request is "application/x-www-form-urlencoded" instead of "multipart/form-data" which means that no file contents were transmitted.  To fix this error you should provide enctype="multipart/form-data" in your form.
Hat vielleicht jemand einen kleinen Tip. wie ich das hinbekomme? Oder mach ich es besser ohne die Field Enclosures?

Vielen Dank

Paddie
Antworten