【问题标题】:Lambda stream encoded stringLambda 流编码字符串
【发布时间】:2021-10-13 21:53:18
【问题描述】:

我将音频文件存储在数组缓冲区中,并使用 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.js amazon-web-services aws-lambda nodejs-stream


    【解决方案1】:

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

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

    2. 使用 S3。您通常使用 S3 处理媒体文件。假设您已经在 S3 上拥有音频文件,您在 Lambda 中生成并返回预签名的获取 URL 对象,并使用该 url 在前端获取对象。 (您可以参考Presigned URL generation code times-out as Lambda, works locally 或其他来源的代码)。您还可以通过在 Lambda 中获取预签名的 put URL 并使用前端的 url 来上传音频文件。

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

    【讨论】:

      猜你喜欢
      • 2013-01-03
      • 1970-01-01
      • 2013-12-29
      • 2012-03-25
      • 1970-01-01
      • 2015-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多