【发布时间】:2019-07-24 12:35:31
【问题描述】:
我正在使用 python 3.7 在 AWS Lambda 中设置一个函数,它不会让我返回字节类型
请注意,这不是 API Gateway 的问题,我是直接调用 lambda。
错误是:Runtime.MarshalError, ... is not JSON serializable
output = BytesIO()
#Code that puts an excel file into output...
return {
'Content-Disposition': 'attachment; filename="export.xlsx"',
'Content-Type': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
'body' : output.getvalue()
}
如果我这样做:
'body' : str(output.getvalue())
它输出了一个损坏的文件,因为它在字符串中添加了b''
如果我这样做:
'body' : base64.b64encode(output.getvalue()).decode()
它还输出一个损坏的文件,可能是因为它改变了文件的二进制表示。
也许我需要上传到 S3?但它不适合我的流程,这是一次性文件创建,它会一直停留在“S3 Limbo”直到 TTL
【问题讨论】:
-
output.getvalue().decode('utf-8')将解决“不可 JSON 序列化”问题。这会有帮助吗? -
@MartinValgur 它不是,它是一个二进制字节流,它给出了 'utf-8' 编解码器无法解码位置 16 中的字节 0xda:无效的继续字节
-
@MartinValgur 不是,这个问题与 api 网关有关,我已经提到我没有使用它
-
你试过 output.read() 吗?
标签: python-3.x amazon-web-services aws-lambda serverless-framework