使用 JavaScript 或 TypeScript 下载 Blob

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

先决条件

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

下载 Blob 对象

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

下载到指定文件路径

以下示例演示如何使用文件路径,通过 BlobClient.downloadToFile 方法下载 blob。 此方法仅在 Node.js 运行时中可用:

async function downloadBlobToFile(containerClient, blobName, localFilePath) {

    const blobClient = containerClient.getBlobClient(blobName);
    
    await blobClient.downloadToFile(localFilePath);
}

以流的形式下载

以下示例通过创建 Node.js 可写流对象,然后使用 BlobClient.download 方法将数据通过管道传输到该流中,以下载 Blob。

async function downloadBlobAsStream(containerClient, blobName, writableStream) {

    const blobClient = containerClient.getBlobClient(blobName);

    const downloadResponse = await blobClient.download();

    downloadResponse.readableStreamBody.pipe(writableStream);
}

下载为字符串

以下 Node.js 示例采用 BlobClient.download 方法将 Blob 下载到字符串。 在 Node.js 中,blob 数据会以 readableStreamBody 的形式返回。

async function downloadBlobToString(containerClient, blobName) {

    const blobClient = containerClient.getBlobClient(blobName);

    const downloadResponse = await blobClient.download();

    const downloaded = await streamToBuffer(downloadResponse.readableStreamBody);
    console.log('Downloaded blob content:', downloaded.toString());
}

function streamToBuffer(readableStream) {
    return new Promise((resolve, reject) => {
        const chunks = [];
        readableStream.on('data', (data) => {
            chunks.push(data instanceof Buffer ? data : Buffer.from(data));
        });
        readableStream.on('end', () => {
            resolve(Buffer.concat(chunks));
        });
        readableStream.on('error', reject);
    });
}

如果在浏览器中使用 JavaScript,blob 数据会以承诺 blobBody 的形式返回。 若要了解详细信息,请参阅 BlobClient.download 中的浏览器用法示例。

下载时进行数据传输验证

使用 CRC64-NVME 传输验证为Azure Blob 存储提供客户端级数据完整性,使你能够验证应用程序发送的数据是否与Azure中存储和读取的数据相同。 启用后,Blob SDK 会在上传和下载操作期间计算并验证 CRC64-NVME 校验和,同时服务独立计算并验证其接收和返回的数据 CRC64-NVME 校验和。 对每个请求以及整个数据流进行验证,确保即使数据以分区方式传输(如块上传或范围读取),整个 Blob 也都能得到验证。 有关更多详细信息,请参阅 结构化正文格式

可以使用 BlobClientConfig 在客户端级别定义传输验证选项,该配置将验证选项应用于从 BlobClient 实例调用的所有方法。 或者,可以通过选项(如 BlobDownloadOptions)替代操作级别的传输验证选项。

const blobServiceClient = new BlobServiceClient(
   `https://${account}.blob.core.chinacloudapi.cn`,
   new DefaultAzureCredential(),
   {
     uploadContentChecksumAlgorithm: "StorageCrc64",
     downloadContentChecksumAlgorithm: "StorageCrc64",
   }
);

资源

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

代码示例

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

REST API 操作

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

客户端库资源

  • 本文是适用于 JavaScript/TypeScript 的 Blob 存储开发人员指南的一部分。 要了解详细信息,请参阅构建 JavaScript/TypeScript 应用中的完整开发人员指南文章列表。