#node.js #amazon-s3 #aws-lambda
#node.js #amazon-s3 #aws-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);
});
Комментарии:
1. Ну, это не имеет никакого отношения к AWS S3. Это связано только с тем, какую библиотеку потоков преобразования чтения строк вы используете….
2. Правильно, но я хотел дать полный контекст 🙂
3. Если вы хотите предоставить полный контекст, вы бы сказали нам, какой пакет чтения строк вы используете. Мы можем догадаться, но будет лучше, если вы просто скажете нам.
4. Прошу прощения, это средство чтения строк, и оно находится в коде, который я предоставил. Кстати, я также пробовал пакет readline, и это тоже не помогло.
Ответ №1:
Как упоминал Брэд, ему трудно помочь, поскольку это скорее проблема с вашей библиотекой для чтения строк.
Однако я могу предложить альтернативное решение, которое не требует библиотеки.
Я бы использовал GetObject, как и вы, но я бы также указал значение для параметра range, затем разбил файл на фрагменты, а затем прекратил чтение фрагментов, когда я удовлетворен.
Если в прочитанном фрагменте нет / n, тогда прочитайте другой фрагмент, продолжайте, пока я не получу / n , затем прочитайте с начала моих буферизованных данных в / n, установите новую начальную позицию int на основе позиции / n, а затем прочитайте новый фрагмент с этой позицииесли вы хотите прочитать больше данных.
Проверьте параметр range в api: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#getObject-property