AWS API Gateway从base64浏览器返回二进制文件错误

时间:2017-02-12 22:44:13

标签: image amazon-web-services amazon-s3

我在python 2.7中创建了一个AWS lambda,它收到一个id, 从s3存储桶中检索文件并将其转换为base64:

with open("tweet_raw.csv") as csvfile:
    colnames = ['created_at', 'id', 'idstr', 'text1']
    rdr = pd.read_csv(csvfile, header=None,
                      names=colnames,
                      usecols=["created_at", "id", "idstr", 'text1']).set_index('created_at')['text1'].to_dict()

    values = rdr.values()
    #dict(zip(list(rdr.created_at), list(rdr.text1)))
    #pprint(rdr)

def sentenceTokeniser():
    zen = values(list(values)['text1'])
    zen.words

一切都是正确的,生成的base64经过测试和纠正。这是一个jpeg。

现在在api网关上:

  • 创建API
  • 添加到二进制支持二进制媒体类型:image / jpeg
  • 将GET方法添加到资源。
  • 添加方法响应HTTP状态:200型号:image / jpeg =>空
  • 在"整合响应中添加Content-Type:= image / jpeg"状态200> "身体映射模板"

使用此模板:

response = s3.Object( s3_bucket, r['prefix'] + str( id) ).get()
data = base64.b64encode( response['Body'].read())
return data

部署API,测试......和 浏览器说:图像无法显示,因为它包含错误。

我尝试了一百个不同的版本而没有结果。我的错是什么?

1 个答案:

答案 0 :(得分:0)

最后我发现,目前,您无法通过Web控制台解决此问题。根据daveg的建议,您必须使用AWS CLI更改为设置contentHandling = CONVERT_TO_TEXT。操作,正如我所说,你不能在网络界面上做。

有关详细信息:aws forum thread