首页 > 解决方案 > 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);
            }
          });

标签: node.jsamazon-web-servicesaws-lambdanodejs-stream

解决方案


不,没有。每个 Lambda 函数调用可以返回一个负载,并且 Lambda 函数调用是独立的。我提出了两种可能的解决方案。

  1. 请求特定的块。您可以多次调用 Lambda 函数,每次调用都请求特定的数据块,并将它们合并为前端的一个数据(在您的情况下为文件)。

  2. 使用 S3。您通常使用 S3 处理媒体文件。假设您已经在 S3 上拥有音频文件,您在 Lambda 中生成并返回预签名的 get URL 对象,并使用该 url 在前端获取对象。(您可以将Presigned URL 生成代码超时的代码称为 Lambda,在本地或其他来源工作)。您还可以通过在 Lambda 中获取预签名的 put URL 并使用前端的 url 来上传音频文件。

我会建议第二种解决方案,因为它是处理媒体文件的一种更标准的方式。


推荐阅读