首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >返回BytesIO文件?

返回BytesIO文件?
EN

Stack Overflow用户
提问于 2019-07-24 12:35:31
回答 1查看 2K关注 0票数 8

我正在使用python 3.7在AWS Lambda中设置一个函数,它不允许我返回字节类型

请注意,这是,而不是API 的问题,我正在直接调用lambda。

错误是: Runtime.MarshalError .不能将JSON序列化

代码语言:javascript
运行
复制
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()
    }

如果我这样做了:

代码语言:javascript
运行
复制
'body' : str(output.getvalue())

它输出损坏的文件,因为它将b''添加到字符串中。

如果我这样做了:

代码语言:javascript
运行
复制
'body' : base64.b64encode(output.getvalue()).decode()

它还输出一个损坏的文件,可能是因为它改变了文件的二进制表示形式。

也许我需要上传到S3?但是它不适合我的流,这是一个一次性的文件创建,它将停留在"S3 Limbo“直到TTL

EN

回答 1

Stack Overflow用户

发布于 2020-01-12 23:30:02

不可能从直接调用的AWS Lambda函数返回未编码的二进制数据。

根据文档

如果处理程序返回不能由json.dumps序列化的对象,运行时将返回一个错误。

使用API可以这样做的原因是因为API正在执行函数返回为二进制的base64 JSON内容的转换。(请参阅文档这里)

我需要了解更多关于如何调用Lambda的信息,但我怀疑您可以将相同的base64解码逻辑实现到直接调用客户机中。或者,如果您希望使客户端尽可能简单,可以使用带有生命周期挂钩的S3来防止存储桶填充临时文件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57183102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档