2017-03-13 70 views
3

我正在使用AWS API网关(APIG)和Lambda函数构建无服务器的网站。我必须使用代理集成,因为后面的Lambda函数必须接收http请求标头。同时,需要提供一些二进制数据。在我的情况下,favicon.ico文件。其他人可能想要为动态创建的PDF或Excel文件提供服务。 APIG为此目的提供二进制支持。使用base64对数据进行编码并配置该MIME内容类型,以便在将其提供给客户端之前将其解码。但是,这不适用于代理集成。代理集成只是跳过集成响应部分。如何使用代理集成从AWS API网关提供二进制数据?

我试图将favicon.ico的请求重定向到S3端点,但浏览器显示奇怪的行为。因为ico文件来自不同的重定向域,而不是相同的域。

使用base64对其进行编码并让客户端浏览器对其进行解码并不是一种选择,因为这不是标准功能,可能无法在所有浏览器中使用。

我想我不能做任何事情,直到AWS为此添加一个新功能。有没有人看过这个问题?任何想法或建议?

回答

0

在这里回答我自己的问题。您应该去AWS论坛获取AWS问题。这里不是mamy AWS用户。

答案:使用代理集成的二进制支持能够工作,并且适用于传入和传出响应。

有3个与此相关的因素:

  1. 在APIG二进制支持设置MIME类型中的传入和传出JSON(I设置此上控制台)
  2. 的“isBase64Encoded”值
  3. 传出JSON中的“Content-type”值

上面的答案意味着是的,你可以接受文件,并且是的,你可以通过代理集成来分发文件。

当用户'发布'与身体,如果您设置的MIME类型匹配它,APIG编码整个身体部分base64,并指出这与“isBase64Encoded”值。传出响应也会发生同样的情况。如果您想要使用二进制数据进行响应,请使用base64进行编码,并在传出的JSON中将该值设置为true。

对于传入请求,它仅取决于您设置的MIME类型之一。对于传出,这两个条件,JSON和MIME类型中的指标都必须匹配。

为了简单起见,我只是将MIME类型设置为*/*。无论何时用户提交任何内容,让APIG编码然后解码。每当我用二进制响应,我只需设置指标并以base64编码。我不这样做与其他类型,如测试/ HTML(不压缩)。

+0

我想在我的一个终端中返回一个PDF,我将它编码为base64,并将“isBase64Encoded”设置为true。但是,我收回的PDF看起来好像不能正确解码。如果我在文本编辑器中打开文件,手动解码并保存,则可以查看PDF。任何想法为什么发生这种情况? – JPL

+0

JPL,请检查您的MIME设置是否支持二进制。 – gini09

+0

自从我上一条评论以来,我已经为所有类型*/*添加了二进制支持,它可以工作,但它会弄乱非二进制类型,比如JSON。如果我输入应用程序/ pdf或甚至应用程序/ *,API网关不会识别这些,并且不会正确处理类型。我不确定格式是否有误或者是否有其他设置。 – JPL

相关问题