node.js - Lambda 流编码字符串
问题描述
我将音频文件存储在数组缓冲区中,并使用 base64 对其进行编码。我需要从 lambda 发送数据以响应客户端。对于较大的音频文件,我面临 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 函数调用是独立的。我提出了两种可能的解决方案。
请求特定的块。您可以多次调用 Lambda 函数,每次调用都请求特定的数据块,并将它们合并为前端的一个数据(在您的情况下为文件)。
使用 S3。您通常使用 S3 处理媒体文件。假设您已经在 S3 上拥有音频文件,您在 Lambda 中生成并返回预签名的 get URL 对象,并使用该 url 在前端获取对象。(您可以将Presigned URL 生成代码超时的代码称为 Lambda,在本地或其他来源工作)。您还可以通过在 Lambda 中获取预签名的 put URL 并使用前端的 url 来上传音频文件。
我会建议第二种解决方案,因为它是处理媒体文件的一种更标准的方式。
推荐阅读
- react-native - 这个棒棒糖图标的实际名称是什么?
- python - 带有列表输入的python中的嵌套循环
- python-2.7 - 我如何从 askfilename 获取另一个函数的路径
- node.js - 如何在@hapi/joi 中设置自定义错误消息?
- c++ - C++ 编程问题,未能将指针分配给正确的对象
- c# - 代码更改后未清除所有客户端浏览器的 MVC Bundle 集合浏览器缓存
- php - 从模型中的控制器获取请求 - Laravel
- php - PHP - 在希伯来字母的情况下数组元素的顺序错误
- c - 在 lex 的定义和规则部分中编写语句之间的区别
- javascript - 传单:如何获取 CountryCode (latLng)