
关于
Azure Blob Storage JavaScript/TypeScript SDK(@azure/storage-blob)。用于上传、下载、列举和管理 Blob 及容器。
name: azure-storage-blob-ts description: Azure Blob Storage JavaScript/TypeScript SDK (@azure/storage-blob) 用于 Blob 操作。用于上传、下载、列举和管理 Blob 及容器。 risk: unknown source: community date_added: '2026-02-27'
@azure/storage-blob (TypeScript/JavaScript)
用于 Azure Blob Storage 操作的 SDK — 上传、下载、列举和管理 Blob 及容器。
安装
npm install @azure/storage-blob @azure/identity
当前版本: 12.x
Node.js: >= 18.0.0
环境变量
AZURE_STORAGE_ACCOUNT_NAME=<account-name>
AZURE_STORAGE_ACCOUNT_KEY=<account-key>
# 或连接字符串
AZURE_STORAGE_CONNECTION_STRING=DefaultEndpointsProtocol=https;AccountName=...
认证
DefaultAzureCredential(推荐)
import { BlobServiceClient } from "@azure/storage-blob";
import { DefaultAzureCredential } from "@azure/identity";
const accountName = process.env.AZURE_STORAGE_ACCOUNT_NAME!;
const client = new BlobServiceClient(
\`https://\${accountName}.blob.core.windows.net\`,
new DefaultAzureCredential()
);
连接字符串
import { BlobServiceClient } from "@azure/storage-blob";
const client = BlobServiceClient.fromConnectionString(
process.env.AZURE_STORAGE_CONNECTION_STRING!
);
StorageSharedKeyCredential(仅 Node.js)
import { BlobServiceClient, StorageSharedKeyCredential } from "@azure/storage-blob";
const accountName = process.env.AZURE_STORAGE_ACCOUNT_NAME!;
const accountKey = process.env.AZURE_STORAGE_ACCOUNT_KEY!;
const sharedKeyCredential = new StorageSharedKeyCredential(accountName, accountKey);
const client = new BlobServiceClient(
\`https://\${accountName}.blob.core.windows.net\`,
sharedKeyCredential
);
SAS 令牌
import { BlobServiceClient } from "@azure/storage-blob";
const accountName = process.env.AZURE_STORAGE_ACCOUNT_NAME!;
const sasToken = process.env.AZURE_STORAGE_SAS_TOKEN!; // 以 "?" 开头
const client = new BlobServiceClient(
\`https://\${accountName}.blob.core.windows.net\${sasToken}\`
);
客户端层级结构
BlobServiceClient(账户级别)
└── ContainerClient(容器级别)
└── BlobClient(Blob 级别)
├── BlockBlobClient(块 Blob - 最常用)
├── AppendBlobClient(追加 Blob)
└── PageBlobClient(页 Blob - VHD)
容器操作
创建容器
const containerClient = client.getContainerClient("my-container");
await containerClient.create();
// 或不存在时创建
await containerClient.createIfNotExists();
列举容器
for await (const container of client.listContainers()) {
console.log(container.name);
}
// 带前缀过滤
for await (const container of client.listContainers({ prefix: "logs-" })) {
console.log(container.name);
}
删除容器
await containerClient.delete();
// 或存在时删除
await containerClient.deleteIfExists();
Blob 操作
上传 Blob(简单方式)
const containerClient = client.getContainerClient("my-container");
const blockBlobClient = containerClient.getBlockBlobClient("my-file.txt");
// 上传字符串
await blockBlobClient.upload("Hello, World!", 13);
// 上传 Buffer
const buffer = Buffer.from("Hello, World!");
await blockBlobClient.upload(buffer, buffer.length);
从文件上传(仅 Node.js)
const blockBlobClient = containerClient.getBlockBlobClient("uploaded-file.txt");
await blockBlobClient.uploadFile("/path/to/local/file.txt");
从流上传(仅 Node.js)
import * as fs from "fs";
const blockBlobClient = containerClient.getBlockBlobClient("streamed-file.txt");
const readStream = fs.createReadStream("/path/to/local/file.txt");
await blockBlobClient.uploadStream(readStream, 4 * 1024 * 1024, 5, {
// bufferSize: 4MB, maxConcurrency: 5
onProgress: (progress) => console.log(\`Uploaded \${progress.loadedBytes} bytes\`),
});
从浏览器上传
const blockBlobClient = containerClient.getBlockBlobClient("browser-upload.txt");
// 从 File 输入
const fileInput = document.getElementById("fileInput") as HTMLInputElement;
const file = fileInput.files![0];
await blockBlobClient.uploadData(file);
// 从 Blob/ArrayBuffer
const arrayBuffer = new ArrayBuffer(1024);
await blockBlobClient.uploadData(arrayBuffer);
下载 Blob
const blobClient = containerClient.getBlobClient("my-file.txt");
const downloadResponse = await blobClient.download();
// 读取为字符串(浏览器和 Node.js)
const downloaded = await streamToText(downloadResponse.readableStreamBody!);
async function streamToText(readable: NodeJS.ReadableStream): Promise<string> {
const chunks: Buffer[] = [];
for await (const chunk of readable) {
chunks.push(Buffer.from(chunk));
}
return Buffer.concat(chunks).toS
兼容工具
Claude CodeCursor
标签
后端开发
