使用 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 的传输验证为Azure Blob 存储提供客户端级数据完整性,使你能够验证应用程序发送的数据是否与从Azure中存储和读取的数据相同。 启用后,Blob SDK 会在上传和下载操作期间计算并验证 CRC64 校验和,而服务会独立计算并验证其接收和返回的数据的 CRC64 校验和。 对每个请求以及整个数据流进行验证,确保即使数据以分区方式传输(如块上传或范围读取),整个 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 应用中的完整开发人员指南文章列表。