Python Chalice Framework:请求未指定带有图像/jpeg的接受标头
我想从Chalice/python应用程序返回一个图像。我的整个应用程序代码粘贴在下面:Python Chalice Framework:请求未指定带有图像/jpeg的接受标头,python,amazon-web-services,chalice,Python,Amazon Web Services,Chalice,我想从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( "
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)
结果
{“代码”:“BADDREQUEST”,“消息”:“请求未指定接受”
带有image/jpeg的标头,响应的内容类型为image/jpeg。
如果响应具有二进制内容类型,则请求必须指定
匹配的接受标头。“}
为什么会发生这种情况
我已经浏览了大量文档,其中大部分已经过时,因为Chalice最近添加了二进制支持:
- (警告:这个问题的唯一答案是完全错误的)
- (2017年未经决议错误关闭的发行)
- 是上面391的重新开放
curl-H“accept:image/jpeg”
获得响应,但这是无用的,因为浏览器不能以这种方式工作,我需要在浏览器中使用响应(HTML IMG标记)
更新
我还尝试了@app.route('/makeImage',methods=['GET'],content_types=['image/jpeg'])
结果变成了
{“code”:“UnsupportedMediaType”,“Message”:“Unsupported media type:application/json”}
Chalice中有一个bug,于2019年5月14日修复,并记录在此处:
除了直接从GitHub安装最新的Chalice外,我还必须添加:
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)
在2019年5月14日修复的Chalice中有一个bug,记录如下: 除了直接从GitHub安装最新的Chalice外,我还必须添加:
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)
我也有同样的问题
如果不存在头accept,AWS将其设置为默认应用程序/json,我将收到base64响应。如果我将accept设置为images/jpeg或header中的任何二进制内容类型,那么我就得到了图像。很好,但web浏览器无法设置accept标头
但如果我加上
app.api.binary_types =['*/*']
那么ok我的图像API现在可以工作了很好,但是现在json的失败了。
目前我没有看到任何解决方案,只有两个API网关:一个用于json,一个用于图像。如果您真的只需要一个API网关,我认为您必须在所有json响应上使用gzip压缩来将它们转换为二进制文件
AWS API网关如何与lambda代理一起工作,而不是Chalice问题。但我同意,这是一个很大的限制我也有同样的问题
如果不存在头accept,AWS将其设置为默认应用程序/json,我将收到base64响应。如果我将accept设置为images/jpeg或header中的任何二进制内容类型,那么我就得到了图像。很好,但web浏览器无法设置accept标头
但如果我加上
app.api.binary_types =['*/*']
那么ok我的图像API现在可以工作了很好,但是现在json的失败了。
目前我没有看到任何解决方案,只有两个API网关:一个用于json,一个用于图像。如果您真的只需要一个API网关,我认为您必须在所有json响应上使用gzip压缩来将它们转换为二进制文件
AWS API网关如何与lambda代理一起工作,而不是Chalice问题。但我同意,这是一个很大的限制这个问题也涉及到了破坏json的问题:这个问题也涉及到破坏json的问题: