Невозможно прочитать readableStreamBody из загруженного блоба - PullRequest
1 голос
/ 05 июня 2019

Я могу проверить внутренний буфер, чтобы увидеть, присутствуют ли мои текстовые данные?Правильно ли я использую Stream.read () для node.js?

У меня есть текстовый файл в виде большого двоичного объекта, хранящийся в хранилище AzureКогда я загружаю большой двоичный объект, я получаю читаемый поток, а также информацию о большом двоичном объекте.Возвращаемые данные имеют значение contentLength 11, которое является правильным.

Я не могу прочитать пар.Всегда возвращает ноль.Документы node.js говорят:

Метод readable.read () извлекает некоторые данные из внутреннего буфера и возвращает их.Если нет данных, доступных для чтения, возвращается значение null.

Согласно Node.js нет доступных данных.

async function downloadData(){
    const textfile = "name.txt"

    const containerURL = ContainerURL.fromServiceURL(serviceURL, "batches")
    const blockBlobURL = BlockBlobURL.fromContainerURL(containerURL, textfile );
    let baseLineImage = await blockBlobURL.download(aborter, 0)

    console.log(baseLineImage.readableStreamBody.read())
    return

}

Метод blobBlobURL.download загружает данные.Более конкретно для Azure it,

Считывает или загружает большой двоичный объект из системы, включая его метаданные и свойства.Вы также можете вызвать Get Blob для чтения снимка.

В Node.js данные возвращаются в потоке ReadableStreamBody. В браузерах данные возвращаются в обещании blobBody

1 Ответ

2 голосов
/ 06 июня 2019

Согласно вашему коду, вы используете Azure Storage SDK V10 для JavaScript .

На странице npm этого пакета @azure/storage-blob, тамэто асинхронная функция с именем streamToString в примере кода, которая может помочь вам прочитать содержимое из читаемого потока, как показано ниже.

// A helper method used to read a Node.js readable stream into string
async function streamToString(readableStream) {
  return new Promise((resolve, reject) => {
    const chunks = [];
    readableStream.on("data", data => {
      chunks.push(data.toString());
    });
    readableStream.on("end", () => {
      resolve(chunks.join(""));
    });
    readableStream.on("error", reject);
  });
}

Тогда ваш код будет записан, как показано ниже.

async function downloadData(){
    const textfile = "name.txt"

    const containerURL = ContainerURL.fromServiceURL(serviceURL, "batches");
    const blockBlobURL = BlockBlobURL.fromContainerURL(containerURL, textfile );
    let baseLineImage = await blockBlobURL.download(aborter, 0);

    let content = await streamToString(baseLineImage.readableStreamBody);
    console.log(content)
    return content
}

Надеюсь, это поможет.

...