如何使用Node.js创建Azure容器SAS令牌并列出容器?
解决方法
1. 修正SAS权限配置
要列出容器内的Blob,你的SAS令牌需要包含list权限,仅read权限只能读取Blob内容,无法获取容器内的Blob列表。修改权限代码:
const permissions = new BlobSASPermissions(); permissions.read = true; permissions.list = true; // 新增list权限
2. 使用SAS URL初始化容器客户端并列出Blob
生成SAS URL后,需要借助Azure Blob Storage SDK的ContainerClient来完成Blob列表查询,直接访问SAS URL无法返回结构化的Blob列表数据。
完整示例代码:
const { BlobSASPermissions, generateBlobSASQueryParameters, SharedKeyCredential, ContainerClient } = require("@azure/storage-blob"); // 替换为你的存储账户信息 const accountName = "your-storage-account-name"; const accountKey = "your-storage-account-key"; const containerName = "your-container-name"; const sharedKeyCredential = new SharedKeyCredential(accountName, accountKey); const startDate = new Date(); const expiryDate = new Date(startDate); expiryDate.setMinutes(startDate.getMinutes() + 30); const permissions = new BlobSASPermissions(); permissions.read = true; permissions.list = true; // 必须添加list权限才能列出容器内的Blob const sasToken = generateBlobSASQueryParameters({ containerName: containerName, permissions: permissions, startsOn: startDate, expiresOn: expiryDate }, sharedKeyCredential).toString(); console.log(`SAS token for container ${containerName}: ${sasToken}`); const containerSasUrl = `https://${accountName}.blob.core.windows.net/${containerName}?${sasToken}`; // 使用SAS URL创建容器客户端并列出Blob async function listBlobsInContainer() { const containerClient = new ContainerClient(containerSasUrl); for await (const blob of containerClient.listBlobsFlat()) { console.log(`Blob name: ${blob.name}`); } } // 执行列出操作 listBlobsInContainer().catch(err => { console.error("Error listing blobs:", err); });
关键说明
list权限是获取容器内Blob列表的必要条件,缺少该权限会导致列表请求被拒绝。- SDK的
ContainerClient会自动处理请求的签名校验和API逻辑,确保能正确获取Blob列表数据。
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

