我有一个lambda,它加载一个S3文件并将其作为Base64返回:

return {
    "isBase64Encoded": True,
    'statusCode': 200,
    'body': b64encode(...).decode('utf-8'),
    'headers': {
        'Content-Type': 'application/octet-stream',
    }
}

我创建了一个API网关,当我调用它时,我得到:

<Response [200]>
Content-Type application/octet-stream
Content-Length 998356
apparent_encoding ascii

但是调用函数URL会返回:

<Response [200]>
Content-Type application/octet-stream
Content-Length 748765
apparent_encoding None

正确的content-length报头值是API网关返回的值,但是使用函数URL时报头不同,即使它们都链接到相同的Lambda函数版本&amp;正在调用相同的代码.

问题是什么?

推荐答案

isBase64Encoded设置为true时,Lambda函数将反转编码以获得原始数据.这就是为什么你会得到一个更低的content-length值.

然而,b64encode(...).decode('utf-8')编码你的body内容&;然后将其解码回非base64编码的内容.实际上,您并没有返回base64编码的数据,而是指定返回.

isBase64Encoded设置为false,您应该会收到正确的完整数据量——至于它为什么与API Gateway一起工作,它可能会进行内部判断,意识到您实际上没有返回base-64编码的数据,并按原样返回数据.

Python相关问答推荐

将整组数组拆分为最小值与最大值之和的子数组

带条件计算最小值

将数据框架与导入的Excel文件一起使用

处理带有间隙(空)的duckDB上的重复副本并有效填充它们

将pandas Dataframe转换为3D numpy矩阵

OR—Tools CP SAT条件约束

avxspan与pandas period_range

根据列值添加时区

搜索按钮不工作,Python tkinter

Python—压缩叶 map html作为邮箱附件并通过sendgrid发送

Discord.py -

统计numpy. ndarray中的项目列表出现次数的最快方法

使用tqdm的进度条

数据框,如果值在范围内,则获取范围和

当我定义一个继承的类时,我可以避免使用`metaclass=`吗?

Match-Case构造中的对象可调用性测试

如何在表单中添加管理员风格的输入(PDF)

将数据从一个单元格保存到Jupyter笔记本中的下一个单元格

函数()参数';代码';必须是代码而不是字符串

Pandas:使列中的列表大小与另一列中的列表大小相同