Скачивание большого двоичного объекта с помощью TypeScript

В этой статье показано, как скачать большой двоичный объект с помощью клиентской библиотеки службы хранилища Azure для JavaScript. Данные больших двоичных объектов можно скачивать в различные места назначения, включая локальный путь к файлу, поток или текстовую строку.

Предварительные требования

  • В примерах в этой статье предполагается, что у вас уже есть проект, настроенный для работы с клиентской библиотекой Хранилище BLOB-объектов Azure для JavaScript. Дополнительные сведения о настройке проекта, включая установку пакета, импорт модулей и создание авторизованного клиентского объекта для работы с ресурсами данных, см. в статье Начало работы с Хранилище BLOB-объектов Azure и TypeScript.
  • Механизм авторизации должен иметь разрешения на выполнение операции скачивания. Дополнительные сведения см. в руководстве по авторизации для следующей операции REST API:

Загрузка BLOB-объектов

Для скачивания большого двоичного объекта можно использовать любой из следующих способов:

Загрузка по пути к файлу

В следующем примере выполняется скачивание большого двоичного объекта с помощью пути к файлу с помощью метода BlobClient.downloadToFile . Этот метод доступен только в среде выполнения Node.js:

async function downloadBlobToFile(
  containerClient: ContainerClient,
  blobName,
  fileNameWithPath
): Promise<void> {
  const blobClient = await containerClient.getBlobClient(blobName);

  const downloadResult = await blobClient.downloadToFile(fileNameWithPath);
  if (!downloadResult.errorCode) {
    console.log(
      `download of ${blobName} success ${downloadResult.blobCommittedBlockCount}`
    );
  }
}

Загрузка в виде потока

В следующем примере выполняется загрузка BLOB-объекта путем создания объекта потока Node.js с возможностью записи и последующей передачи в этот поток с помощью метода BlobClient.download.

async function downloadBlobAsStream(
  containerClient: ContainerClient,
  blobName,
  writableStream
) {
  const blobClient: BlobClient = await containerClient.getBlobClient(blobName);

  const downloadResponse = await blobClient.download();

  if (!downloadResponse.errorCode && downloadResponse?.readableStreamBody) {
    downloadResponse.readableStreamBody.pipe(writableStream);
    console.log(`download of ${blobName} succeeded`);
  }
}

Скачивание в строку

В следующем примере Node.js скачивает большой двоичный объект в строку с помощью метода BlobClient.download . В Node.js данные больших двоичных объектов возвращаются readableStreamBodyв .

async function downloadBlobToString(
  containerClient: ContainerClient,
  blobName
): Promise<void> {
  const blobClient: BlobClient = await containerClient.getBlobClient(blobName);

  const downloadResponse: BlobDownloadResponseParsed =
    await blobClient.download();

  if (!downloadResponse.errorCode && downloadResponse.readableStreamBody) {
    const downloaded = await streamToBuffer(
      downloadResponse.readableStreamBody
    );
    if (downloaded) {
      console.log('Downloaded blob content:', downloaded.toString());
    }
  }
}
async function streamToBuffer(readableStream) {
  return new Promise((resolve, reject) => {
    const chunks: Buffer[] = [];

    readableStream.on('data', (data) => {
      const content: Buffer = data instanceof Buffer ? data : Buffer.from(data);
      chunks.push(content);
    });
    readableStream.on('end', () => {
      resolve(Buffer.concat(chunks));
    });
    readableStream.on('error', reject);
  });
}

Если вы работаете с JavaScript в браузере, данные BLOB-объектов возвращаются в объекте promise blobBody. Дополнительные сведения см. в примере использования браузеров на сайте BlobClient.download.

Ресурсы

Дополнительные сведения о скачивании BLOB-объектов с помощью клиентской библиотеки Хранилище BLOB-объектов Azure для JavaScript и TypeScript см. в следующих ресурсах.

Операции REST API

Пакет AZURE SDK для JavaScript и TypeScript содержит библиотеки, которые создаются на основе REST API Azure, что позволяет взаимодействовать с операциями REST API через знакомые парадигмы языка. Методы клиентской библиотеки для скачивания больших двоичных объектов используют следующую операцию REST API:

Примеры кода

Просмотрите примеры кода из этой статьи (GitHub):

Ресурсы клиентской библиотеки