Azure Blob Node.js скачать файлы BLOB-объектов - PullRequest
0 голосов
/ 13 марта 2020

У меня node.js Приложение с интерфейсом в Angular, мне нужно загрузить и загрузить файлы в Azure blob / azure хранилище

Я следовал приведенным здесь инструкциям: https://github.com/Azure/azure-sdk-for-js/blob/master/sdk/storage/storage-blob/samples/typescript/src/basic.ts

теперь, когда я загружаю его, он читает изображение или файл в читаемом потоке, как я могу загрузить файл с azure blob

ниже мой код, который перечисляет капли читает в читаемый поток

const { BlobServiceClient, StorageSharedKeyCredential, BlobDownloadResponseModel } = require('@azure/storage-blob');

const uuidv1 = require('uuid/v1');

async ListBlob(req,res){
    const blobServiceClient = await BlobServiceClient.fromConnectionString(this.AZURE_STORAGE_CONNECTION_STRING);
    const container = blobServiceClient.getContainerClient('mycontainer');
    const containerClient = await blobServiceClient.getContainerClient(container.containerName);
    let temp = Array();
    // List the blob(s) in the container.
    for await (const blob of containerClient.listBlobsFlat()) {
        temp.push(blob.name);
    }
    const blockBlobClient = containerClient.getBlockBlobClient(temp[2]);
    const downloadBlockBlobResponse = await blockBlobClient.download(0);
    let result = await this.streamToString(downloadBlockBlobResponse.readableStreamBody!);
    res.send(result);

}

async 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);
  });
}

Ответы [ 2 ]

0 голосов
/ 31 марта 2020

Пожалуйста, попробуйте BlockBlobClient.downloadToFile() метод

  const response = await blockBlobClient.downloadToFile("filePath");
0 голосов
/ 15 марта 2020

Если ваша цель - записать поток в локальный файл, то все, что вам нужно сделать, это прочитать поток как buffer и сохранить его в файле, используя fs* Модуль 1006 * в узле.

По сути, вы можете попробовать что-то вроде этого:

const fs = require('fs');

async streamToLocalFile(readableStream) {
  return new Promise((resolve, reject) => {
    let buffer = Buffer.from([]);
    readableStream.on("data", (data) => {
        buffer = Buffer.concat([buffer, data], buffer.length+data.length);//Add the data read to the existing buffer.
    });
    readableStream.on("end", () => {
        fs.writeFileSync('your file path', buffer);//Write buffer to local file.
        resolve('your file path);//Return that file path.  
    });
    readableStream.on("error", reject);
  });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...