【问题标题】:Why is my streamed mp3 file longer/ larger than the original in the S3 bucket?为什么我的流式 mp3 文件比 S3 存储桶中的原始文件更长/更大?
【发布时间】:2021-04-12 14:27:12
【问题描述】:

我正在尝试通过快速 API 从 AWS S3 存储桶流式传输 mp3 文件。

该应用程序可以很好地连接到 AWS,我可以从存储桶下载/流式传输文件。但我在测试时注意到,一旦流完成,我的文件比上传到 S3 存储桶的原始文件长。播放文件时,声音会跳动很多。我已经运行了几次,并且始终比原始文件大,但我不确定为什么。这是我第一次使用任何类型的流数据,但感觉好像我错过了一些明显的东西。我认为这可能与信息块周围的元数据有关,但我不确定。我试过搜索为什么会出现这种情况,但我不确定使用什么词汇来搜索我需要的答案。

这是我用来从 AWS 流式传输文件的代码,将其直接通过管道传输到 API 调用的响应对象中。

      s3Client
      .getObject(params, (err, data) => {
        if (err) console.log("There was an error finding object: ", err);
      })
      .createReadStream()
      .on("error", (err) => {
        console.log("File Stream error: ", err);
      })
      .on("data", (chunk) => {
        total += chunk.length;
      })
      .on("end", () => {
        console.log("All done");
        console.log("Total Streamed MB: ", total / 1000000);
      })
      .pipe(response);

这是我正在谈论的文件大小的示例: Console output showing streamed file much larger than original file

任何帮助将不胜感激。

【问题讨论】:

    标签: node.js typescript amazon-s3 stream


    【解决方案1】:

    在对 AWS github 错误进行了一些挖掘之后,我遇到了一些有类似问题的人。有一个问题:

    s3Client
    .getObject(params, (err, data) => {
        if (err) console.log("There was an error finding object: ", err);
    })
    .createReadStream()
    

    根据 commentgetObject 调用中的错误回调,链接 createReadStream 会创建两个到 AWS 的请求,这些请求将通过管道传输到相同的响应中。这就是文件大小接近翻倍的原因。按我的预期删除文件流的回调。

    【讨论】:

      猜你喜欢
      • 2018-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-17
      • 2016-11-04
      相关资源
      最近更新 更多