Настройка contentEncoding для потоков BLOB-объектов Azure в файле node.js - PullRequest
0 голосов
/ 18 октября 2018

Итак, у меня есть текстовый файл с кодировкой ISO-8859-1, хранящийся в лазурном блобе, который мне нужно обрабатывать построчно, используя поток, поскольку файлы могут быть довольно большими.

Я гарантировал, чтоcontentEncoding для загруженного большого двоичного объекта корректен и пробовал различные настройки, такие как ISO-8859-1, latin1, binary, ...

Я могу загрузить файл на диск, как это, и кодировка загруженного файла восстанавливается локально просто отлично:

const stream = require('stream');
const storage = require('azure-storage');
const blobService = storage.createBlobService();
const containerName = 'myContainer';
const file = 'in.txt';

let readable = blobService.createReadStream(containerName, file, {encoding: 'latin1'});

let outstream = fs.createWriteStream('./out.txt');
readable.pipe(outstream);

То, что я на самом деле хочу сделать вместо загрузки файла на диск, - это работать через поток с readline, анализируя файл при поступлении данных:

const stream = require('stream');
const storage = require('azure-storage');
const blobService = storage.createBlobService();
const containerName = 'myContainer';
const file = 'in.txt';

let readable = blobService.createReadStream(containerName, file, {encoding: 'latin1'});
readable.setEncoding('latin1');
let rl = readline.createInterface(readable);

rl.on('line', function(line) {
    console.log('line: ' + line);
});

rl.on('close', function() {
    console.log('Stream closed.');
});

Вышеупомянутый код не будет работать, но вернет ошибку:

TypeError: readable.setEncoding is not a function

Когда я опускаю setEncoding, поток будет обработан readline просто отлично, но кодировка неправильная.

Я также попробовал Azure getBlobText (хотя это действительно не то, что я хочу), который не сможет проверить contentMD5 и вернет ошибку для файлов, содержащих латинские символы:

Error: Hash mismatch (integrity check failed), Expected value is jd2+sYDibe5GCw5JwpMhpg==, retrieved q/IlYBBNY6XluFzKKPq7hw==.
at BlobService._validateLengthAndMD5

Как сделатьявыйти из этого, не загружая файл на диск?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...