通过 TypeScript 下载 Blob

本文介绍如何使用适用于 JavaScript 的 Azure 存储客户端库下载 blob。 可以将 Blob 数据下载到各种目标,包括本地文件路径、流或文本字符串。

先决条件

  • 本文中的示例假设你已经设置了一个项目来使用适用于 JavaScript 的 Azure Blob 存储客户端库。 若要了解如何设置项目(包括安装包、导入模块,以及创建授权客户端对象来使用数据资源),请参阅开始使用 Azure Blob 存储和 TypeScript
  • 授权机制必须具有执行下载操作的权限。 若要了解详细信息,请参阅以下 REST API 操作的授权指南:

下载 Blob

可以使用以下任一方法来下载 Blob:

下载到文件路径

以下示例采用 BlobClient.downloadToFile 方法使用文件路径下载 Blob。 此方法仅在 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}`
    );
  }
}

以流的形式下载

以下示例采用 BlobClient.download 方法通过创建 Node.js 可写流对象并通过管道传递到该流来下载 Blob。

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 方法将 Blob 下载到字符串。 在 Node.js 中,blob 数据会以 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 数据会以承诺 blobBody 的形式返回。 若要了解详细信息,请参阅 BlobClient.download 中的浏览器用法示例。

资源

若要详细了解如何使用适用于 JavaScript 和 TypeScript 的 Azure Blob 存储客户端库来下载 Blob,请参阅以下资源。

REST API 操作

适用于 JavaScript 和 TypeScript 的 Azure SDK 包含基于 Azure REST API 而生成的库,允许你通过熟悉的语言范例与 REST API 操作进行交互。 用于下载 blob 的客户端库方法使用以下 REST API 操作:

代码示例

查看本文中的代码示例 (GitHub):

客户端库资源