我想从 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)
结果...
{"Code":"BadRequest","Message":"请求未指定带有 image/jpeg 的 Accept 标头,响应的 Content-Type 为 image/jpeg。如果响应具有二进制 Content-Type,则请求必须指定匹配的 Accept 标头。"}
为什么会这样?
我已经翻阅了大量文档,其中大部分已经过时,因为最近向 Chalice 添加了二进制支持:
- https://github.com/aws/chalice/pull/352
- https://github.com/aws/chalice/issues/592
- https://github.com/aws/chalice/issues/348
- AWS Chalice 从 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"}