通过 TypeScript 下载 Blob
本文介绍如何使用适用于 JavaScript 的 Azure 存储客户端库下载 blob。 可以将 Blob 数据下载到各种目标,包括本地文件路径、流或文本字符串。
先决条件
- 本文中的示例假设你已经设置了一个项目来使用适用于 JavaScript 的 Azure Blob 存储客户端库。 若要了解如何设置项目(包括安装包、导入模块,以及创建授权客户端对象来使用数据资源),请参阅开始使用 Azure Blob 存储和 TypeScript。
- 授权机制必须具有执行下载操作的权限。 若要了解详细信息,请参阅以下 REST API 操作的授权指南:
下载 Blob
可以使用以下任一方法来下载 Blob:
- BlobClient.download
- BlobClient.downloadToBuffer(仅适用于 Node.js 运行时)
- BlobClient.downloadToFile(仅适用于 Node.js 运行时)
下载到文件路径
以下示例采用 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 操作:
- 获取 Blob (REST API)
代码示例
查看本文中的代码示例 (GitHub):