Использование Python API Blobstore через HTTPS приводит к ошибке 405 при перенаправлении назад - PullRequest
2 голосов
/ 01 декабря 2010

Не знаю, если я делаю это неправильно или есть ошибка (я бы так подумал, видел, что у других такая же проблема) в методе blobstore.create_upload_url.

В моем приложении.yaml У некоторых URL есть свойство secure: always, а атрибут action элемента form начинается с https://, но когда он возвращается из API, он перенаправляется на не https.

файл ошибки в системе отслеживания проблем с механизмом приложений Google , но нет ответа от Google.

Кто-нибудь знает о хорошей работе?Мое текущее решение состоит в том, чтобы иметь отдельный файл .py для обработки ответа, а затем вернуться обратно к исходному URL, но через https.

РЕДАКТИРОВАТЬ

Я использую это дляустановите атрибут действия:

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>

Вывод в html выглядит примерно так:

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

Файл загружается (я могу просмотреть его в консоли администратора-> просмотрщик BLOB-объектов), но когдаAPI перенаправляет обратно, перенаправляет http и при использовании secure: always запрос http возвращает ошибку HTTP 405.

Это обработчик загрузки:

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')

1 Ответ

2 голосов
/ 18 февраля 2011

Эта проблема была исправлена ​​в SDK 1.4.2.Я только что проверил, и теперь он работает нормально.

Смотрите проблему в трекере здесь: http://code.google.com/p/googleappengine/issues/detail?id=3463

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...