首页 > 解决方案 > 使用 API 网关非代理 lambda 和二进制输出设置自定义标头

问题描述

使用 lambda 非代理集成时是否可以设置自定义标头?

目前我已经启用了二进制支持并且我直接从我的处理程序返回但是我需要设置下载的文件名并且计划使用Content-Disposition: attachment; filename="filename.xlsx"但是我不确定如果我有 lambda 代理集成我该怎么做关掉。

阅读此https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-integration-settings-integration-response.html我不确定它是否仅适用于 json 响应?

该示例将正文注释显示为采用 json 对象,但随后说有一个 base64 编码选项用于二进制支持,但我只是直接从我的函数返回我的二进制数据,如果可能的话,我根本不打算使用 lambda 代理。

我目前正在下载文件,但我正在使用临时文件并且我想命名下载。

# In my service 
with tempfile.NamedTemporaryFile(suffix=".xlsx") as tmp:
    pd.DataFrame(report_json).to_excel(tmp.name)

    bytes_io = BytesIO(tmp.read())

    return bytes_io

# In my handler
return base64.b64encode(bytes_io.getvalue())

标签: python-3.xamazon-web-serviceslambdaapi-gateway

解决方案


使用更高版本的无服务器框架,例如Content-Disposition可以设置自定义标头,如下所示。

Integration: lambda
response:
  headers:
    Content-Type: "'text/csv'"
    Content-Disposition: "'attachment; filename=abc.csv'"

我还不确定是否可以将上下文中的值插入到这些值中。


推荐阅读