使用.wav文件的API网关二进制支持
问题描述:
目前我有一个设置,其中API网关接受来自POST请求的.wav
文件,并将编码数据从音频文件发送到作为使用它们的处理程序的lambda函数二进制支持系统。使用.wav文件的API网关二进制支持
我需要将音频文件的是base64编码转换从网关回一个.wav
格式没有写入新文件和读取,因为AWS lambda表达式是只读文件系统。
我试着做new Buffer(data, 'base64').toString('binary')
希望的工作,但它并没有并没有一大堆的信息,有关如何做到这一点。
答
图出来的问题为任何人好奇。
当API网关使用其二进制支持系统对请求主体进行编码时,它们还会将主体和尾部数据(如果存在)编码为WebKitBoundary
。
它只是切出的前部和尾部属于该数据,以便所有编码剩下的只是严格.wav
数据然后重新创建它作为使用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
文件。
答
只要你的文件小于512MB,你可以在一个lambda文件写入/tmp
。
答
主要有两种limitations你需要看使用API网关和Lambda为您的使用情况下进入。
- 音频文件的最大大小为10MB
- 如果您需要将文件存储用于处理在/ tmp目录,你可以容纳高达512MB
因此多数时候仍与10MB的限制受到制约音频文件。
对于这种处理,一个替代的选择是使用下面的流程。
- 使用API网关和Lambda,请求对AWS CloudFront Signed URL上传音频文件到AWS S3。
- 然后将文件直接从客户端上传到S3。
- 具有S3桶拉姆达触发lambda函数用于处理(最大文件大小为512 MB)