Chalice Framework: в запросе не указан заголовок Accept с изображением / jpeg - PullRequest
1 голос
/ 16 мая 2019

Я хочу вернуть изображение из приложения Chalice / python. Весь мой код приложения вставлен ниже:

from chalice import Chalice, Response
import base64

app = Chalice(app_name='hello')

@app.route('/makeImage', methods=['GET'])
def makeImage():
    return Response(
        base64.b64decode(
            "iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="
        ),
        headers={
            'Content-Type': 'image/jpeg'
        },
        status_code=200)

Результат ...

{"Код": "BadRequest", "Сообщение": "В запросе не указано принятие заголовок с изображением / JPEG, ответ имеет тип содержимого изображения / JPEG. Если ответ имеет двоичный тип содержимого, то в запросе должно быть указано соответствующий заголовок Accept. "}

Почему это происходит?

Я уже просмотрел тонну документации, и большая ее часть устарела, поскольку бинарная поддержка была добавлена ​​в Chalice совсем недавно:

Просто в целях устранения неполадок я могу получить ответ с помощью curl -H "accept: image/jpeg", но это бесполезно, поскольку браузеры не работают таким образом, и мне нужно использовать ответ в браузере (HTML IMG TAG).

UPDATE

Я тоже пробовал @app.route('/makeImage', methods=['GET'], content_types=['image/jpeg'])

И результат стал {"Code":"UnsupportedMediaType","Message":"Unsupported media type: application/json"}

1 Ответ

1 голос
/ 16 мая 2019

В Чаше была ошибка, исправленная 14 мая 2019 года и задокументированная здесь:

https://github.com/aws/chalice/issues/1095

В дополнение к установке последней Чашинепосредственно из GitHub мне также пришлось добавить:

app.api.binary_types =['*/*']

в app.py.

Окончательный рабочий код выглядит следующим образом:

from chalice import Chalice, Response
import base64

app = Chalice(app_name='hello')
app.api.binary_types =['*/*']

@app.route('/makeImage', methods=['GET'])
def makeImage():
    return Response(
        base64.b64decode(
            "iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="
        ),
        headers={
            'Content-Type': 'image/jpeg'
        },
        status_code=200)
...