使用.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的限制受到制约音频文件。

对于这种处理,一个替代的选择是使用下面的流程。

  1. 使用API​​网关和Lambda,请求对AWS CloudFront Signed URL上传音频文件到AWS S3。
  2. 然后将文件直接从客户端上传到S3。
  3. 具有S3桶拉姆达触发lambda函数用于处理(最大文件大小为512 MB)