API .wav 文件的网关二进制支持
API Gateway Binary Support with .wav File
目前我有一个设置,其中 API 网关接受来自 POST 请求的 .wav
文件,并将音频文件中的 base64
编码数据发送到我使用他们的二进制支持系统作为处理程序的 lambda 函数。
我需要将来自网关的音频文件的 base64 编码转换回 .wav
格式 而无需 写入新文件和读取,因为 AWS lambda 是只读文件系统。
我已经尝试过 new Buffer(data, 'base64').toString('binary')
希望它能奏效,但没有成功,而且没有很多关于如何做到这一点的信息。
只要您的文件小于 512MB,您就可以在 Lambda 中将文件写入 /tmp
。
在您的用例中使用 API 网关和 Lambda 时,您主要需要研究两个 limitations。
- 音频文件的最大大小为 10MB
- 如果您需要将文件存储在 /tmp 中进行处理,您最多可以容纳 512MB
因此,大多数情况下,您的音频文件将受到 10MB 的限制。
对于这种处理,另一种选择是使用以下流程。
- 使用 API 网关和 Lambda,请求 AWS CloudFront Signed URL 将音频文件上传到 AWS S3。
- 然后直接从客户端上传文件到S3。
- 从 S3 存储桶到 Lambda 函数进行处理的 Lambda 触发器(最大文件大小为 512 MB)
为任何好奇的人找出问题。
当 API 网关使用他们的二进制支持系统对请求的 body 进行编码时,他们还会对来自 body 的 WebKitBoundary
标题和尾部数据进行编码,如果它存在。
它只是删除了与该数据相关的编码的前部和尾部,因此剩下的只是 .wav
数据,然后使用...[=17= 将其重新创建为 Buffer
]
let audio = new Buffer(body, 'base64').toString('binary')
// Sequence of replacements and slices to remove WebKitBoundary header and tail
const audioBuffer = new Buffer(audio, 'binary')
audioBuffer
的结果与使用 fs
模块读取 .wav
文件的结果完全相同。
目前我有一个设置,其中 API 网关接受来自 POST 请求的 .wav
文件,并将音频文件中的 base64
编码数据发送到我使用他们的二进制支持系统作为处理程序的 lambda 函数。
我需要将来自网关的音频文件的 base64 编码转换回 .wav
格式 而无需 写入新文件和读取,因为 AWS lambda 是只读文件系统。
我已经尝试过 new Buffer(data, 'base64').toString('binary')
希望它能奏效,但没有成功,而且没有很多关于如何做到这一点的信息。
只要您的文件小于 512MB,您就可以在 Lambda 中将文件写入 /tmp
。
在您的用例中使用 API 网关和 Lambda 时,您主要需要研究两个 limitations。
- 音频文件的最大大小为 10MB
- 如果您需要将文件存储在 /tmp 中进行处理,您最多可以容纳 512MB
因此,大多数情况下,您的音频文件将受到 10MB 的限制。
对于这种处理,另一种选择是使用以下流程。
- 使用 API 网关和 Lambda,请求 AWS CloudFront Signed URL 将音频文件上传到 AWS S3。
- 然后直接从客户端上传文件到S3。
- 从 S3 存储桶到 Lambda 函数进行处理的 Lambda 触发器(最大文件大小为 512 MB)
为任何好奇的人找出问题。
当 API 网关使用他们的二进制支持系统对请求的 body 进行编码时,他们还会对来自 body 的 WebKitBoundary
标题和尾部数据进行编码,如果它存在。
它只是删除了与该数据相关的编码的前部和尾部,因此剩下的只是 .wav
数据,然后使用...[=17= 将其重新创建为 Buffer
]
let audio = new Buffer(body, 'base64').toString('binary')
// Sequence of replacements and slices to remove WebKitBoundary header and tail
const audioBuffer = new Buffer(audio, 'binary')
audioBuffer
的结果与使用 fs
模块读取 .wav
文件的结果完全相同。