2 Stimmen

Die Verwendung von Blobstore Python API über HTTPS erzeugt einen 405-Fehler bei der Umleitung zurück

Ich weiß nicht, ob ich es falsch mache oder ob es einen Fehler (ich würde es vermuten, da ich gesehen habe, dass andere das gleiche Problem haben) in der blobstore.create_upload_url método.

In meiner app.yaml habe ich für einige url's die Eigenschaft secure: always und die action Attribut des form Element beginnt mit https:// aber wenn es von der API zurückkommt, wird es auf nicht-https umgeleitet.

Es gibt eine Fehlerdatei auf google app engine issue tracker aber keine Antwort von Google.

Kennt jemand eine gute Lösung für dieses Problem? Meine aktuelle Lösung ist eine separate .py-Datei zu haben, um die Antwort zu behandeln und dann direkt zurück zu der ursprünglichen Url aber über https.

EDITAR

Ich verwende dies, um das Aktionsattribut zu setzen:

from google.appengine.api import blobstore
view['upload_url'] = blobstore.create_upload_url 
## pass the view dict to template and in template

<form action="{{ upload_url }}" enctype="multipart/form-data" method="post">
</form>

Die Ausgabe in der html-Datei sieht etwa so aus:

action="https://appid.appspot.com/_ah/upload/AMmfu6bcA9Sfz5isqw6PNNB8xzRy2rUoLaMS2GFjfPEwCZ-vg9M_hQTOR87wYdnMo7ZIbQX9NiNjORFTiKaUoLMHRpXvPf6r8Y5963GD9Cbv_9gIKgtEmtdvt5VcvQxzvbegqG3V5xQT/ALBNUaYAAAAATPdfcxxACFrQnUiLXWx61ViMDZ7F0aLF/"

Die Datei wird hochgeladen (ich kann sie in der Verwaltungskonsole->Blob-Viewer anzeigen), aber wenn die API-Umleitung zurück, leitet sie http und bei Verwendung von secure: always eine http-Anfrage einen HTTP 405-Fehler zurückgibt.

Dies ist der Upload-Handler:

class AddUpdateImageStore(blobstore_handlers.BlobstoreUploadHandler):
def post(self):
    if self.request.get('imagestore_key'):
        image = dbImageStore.ImageStore.get(self.request.get('imagestore_key'))
    else:
        image = dbImageStore.ImageStore()

    image.name = self.request.get('image_name')

    upload_files =  self.get_uploads('image_file')

    if upload_files:
        image.imageUrl = images.get_serving_url(str(upload_files[0].key()))

    imageKey = db.put(image)

    for language in Settings.languages:
        description = self.request.get('image_description_' + language)
        if description:
            imageDescription = dbImageStore.ImageDescription.gql('WHERE imageEntry = :imageEntry AND lang = :lang', imageEntry = imageKey, lang = language).get()
            if imageDescription is None:
                imageDescription = dbImageStore.ImageDescription()
                imageDescription.imageEntry = imageKey
                imageDescription.lang = language

            imageDescription.description = description
            db.put(imageDescription)

    self.redirect('/edit/imageStore/?status=1&message=Image added/updated')

2voto

Bryce Cutt Punkte 1525

Dieses Problem wurde mit SDK 1.4.2 behoben. Ich habe es gerade getestet und es funktioniert jetzt einwandfrei.

Siehe Problem im Tracker hier: http://code.google.com/p/googleappengine/issues/detail?id=3463

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X