【问题标题】:NodeJS - Stream a large ASCII file from S3 with Hex Charcaters (NUL)NodeJS - 使用十六进制字符(NUL)从 S3 流式传输大型 ASCII 文件
【发布时间】:2017-02-23 02:52:01
【问题描述】:

我正在尝试(通过流)读取 Lambda 函数中的一个大文件。我的目标是只阅读前几行并查找一些信息。 S3 中的输入文件似乎包含十六进制字符 (NUL),以下代码在遇到 NUL 字符时停止读取该行并转到下一行。我想知道如何在查找行中的信息之前阅读整行并替换/删除 NUL 字符。以下是无法按预期工作的代码:

                var readline = require('line-reader');
                var readStream = s3.getObject({Bucket: S3Bucket, Key: fileName}).createReadStream();
                readline.eachLine(readStream, {separator: '\n', encoding: 'utf8'}, function(line) {
                    console.log('Line ',line);
                });

【问题讨论】:

  • 嗯,这与 AWS S3 没有任何关系。它只与您正在使用的任何行读取转换流库有关......
  • 正确,但我想提供完整的上下文:)
  • 如果你想提供完整的上下文,你会告诉我们你正在使用什么线阅读包。我们可以猜测,但最好告诉我们。
  • 我很抱歉,它是行阅读器,它在我提供的代码中。顺便说一句,我也尝试过 readline 包,但也没有帮助。

标签: node.js amazon-s3 aws-lambda


【解决方案1】:

正如 Brad 所说,这很难提供帮助,因为这更多是您的 line-reader lib 的问题。

我可以提供一个不需要库的替代解决方案。

我会像你一样使用 GetObject,但我也会为 range 参数指定一个值,然后分块处理文件,然后在我满意时停止读取块。

如果我读取的块没有 /n 然后读取另一个块,继续直到我得到 /n,然后从缓冲数据的开头读取到 /n,设置新的起始位置 int 基于/n 的位置,然后如果您想读取更多数据,则从该位置读取一个新块。

查看 api 中的 range 参数: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#getObject-property

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-05
    • 2014-01-02
    • 1970-01-01
    • 2017-12-11
    • 1970-01-01
    • 2015-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多