我将音频文件存储在数组缓冲区中并使用base64对其进行编码。我需要从lambda发送数据到react客户端。对于较大的音频文件,我面临lambda有效负载限制错误。
是否有办法将数据块从Lambda流到客户端?
function readFile(filepath, callback) {
//Uint8Array
fs.readFile(filepath, (err, data) => {
// Data is a Buffer object
if (err) console.log(err);
callback(data);
})
readFile(`${outputFile}`, function (data) {
try {
let base64enc = base64.encode(data);
responseBody.message = base64enc;
status = statusCodes.OK;
return sendResponse(status, responseBody);//Sending response
} catch (err) {
console.log("error " + err);
reject(err);
}
});
没有。每个Lambda函数调用可以返回一个有效负载,并且Lambda函数调用是独立的。我建议两种可能的解决方案。
-
请求一个特定的chunk。您可以多次调用Lambda函数,每次调用请求一个特定的数据块,并在前端将它们合并为一个数据(在您的情况下是文件)。
-
使用S3。通常使用S3处理媒体文件。假设S3上已经有音频文件,您可以在Lambda中生成并返回预签名的get URL对象,并使用URL在前端获取该对象。(您可以参考预先设计的URL生成代码超时的代码Lambda,工作在本地或其他来源)。你也可以通过在Lambda中获得预签名的put URL并在前端使用该URL来上传音频文件。
我建议使用第二个解决方案,因为它是处理媒体文件的更标准的方法。