我想从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)

结果...



为什么会这样?

我已经阅读了大量的文档,并且由于最近对Chalice添加了二进制支持,因此大多数文档已经过时了:
  • https://github.com/aws/chalice/pull/352
  • https://github.com/aws/chalice/issues/592
  • https://github.com/aws/chalice/issues/348
  • AWS Chalice Return an Image File from S3(警告:此问题的唯一答案是完全错误)
  • https://chalice.readthedocs.io/en/latest/api.html
  • https://github.com/aws/chalice/issues/391(2017年被彻底关闭,没有解决方案)
  • https://github.com/aws/chalice/issues/1095
  • 之上391的重新开放

    仅出于故障排除的目的,我可以使用curl -H "accept: image/jpeg"获得响应,但这是没有用的,因为浏览器无法以这种方式工作,并且我需要在浏览器中使用响应(HTML IMG TAG)。

    更新

    我也尝试过@app.route('/makeImage', methods=['GET'], content_types=['image/jpeg'])
    结果成为{"Code":"UnsupportedMediaType","Message":"Unsupported media type: application/json"}

    最佳答案

    我遇到过同样的问题。

    如果没有头接受,AWS会将其设置为默认application / json,我会收到base64响应。如果将header设置为images / jpeg或任何二进制内容类型,那么我得到了图像。不错,但网络浏览器未设置accept header 。

    但是如果我加上

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

    然后好吧,我的图像API现在可以正常工作了。 很好,但是现在json失败了。

    目前,除了有两个API网关外,我看不到任何解决方案:一个用于json,一个用于图像。如果您真的只想要一个API网关,我认为您必须对所有json响应使用gzip压缩将它们转换为二进制文件。

    AWS API网关如何与lambda代理一起使用,而不是 chalice 问题。但我同意,这是一个很大的限制

    关于python - Chalice Framework:请求未使用image/jpeg指定Accept header ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56159447/

    10-11 08:42