如何使用为指定目录生成的SAS令牌列出Blob存储中的目录内容
基于目录SAS令牌列出Azure Blob存储指定目录文件的实现方案
方法1:通过已有的DataLakeDirectoryClient实现
你已经持有DataLakeDirectoryClient实例的情况下,不需要额外构造DataLakeFileSystemClient,有两种可选方式:
- 直接取实例的
fileSystemClient属性即可获取对应容器的DataLakeFileSystemClient实例 - 更简便的是直接调用DataLakeDirectoryClient的
listPaths方法,直接列出当前目录下的所有文件,不需要跳转至容器实例
代码示例:
// 前置依赖安装命令:`npm install @azure/storage-file-datalake` import { DataLakeDirectoryClient } from "@azure/storage-file-datalake"; // 入参为你已初始化完成的DataLakeDirectoryClient实例 const listAllFilesInDirectory = async (directoryClient) => { // 若确实需要获取DataLakeFileSystemClient,直接取实例属性即可 const fileSystemClient = directoryClient.fileSystemClient; console.log("对应容器名称:", fileSystemClient.name); const result = []; // recursive设为false仅列出当前目录层级,设为true会递归遍历所有子目录 for await (const pathItem of directoryClient.listPaths({ recursive: false })) { // 过滤掉子目录,仅保留文件 if (!pathItem.isDirectory) { result.push({ fileName: pathItem.name.split("/").pop(), fullPath: pathItem.name, fileSize: pathItem.contentLength }); } } return result; }
方法2:通过目录SAS URL构造所需实例
如果你仅持有目录的SAS URL,可按如下方式解析构造出所需的客户端实例:
import { DataLakeFileSystemClient, DataLakeDirectoryClient } from "@azure/storage-file-datalake"; // 入参格式示例:https://myaccount.dfs.core.windows.net/mycontainer/mydirectory{sastoken} const generateClientsFromSasUrl = (directorySasUrl) => { const urlObj = new URL(directorySasUrl); const sasToken = urlObj.search; const pathSegments = urlObj.pathname.split("/").filter(Boolean); const fileSystemName = pathSegments[0]; const accountEndpoint = `${urlObj.protocol}//${urlObj.host}`; // 构造DataLakeFileSystemClient const fileSystemClient = new DataLakeFileSystemClient( `${accountEndpoint}/${fileSystemName}${sasToken}` ); // 也可以直接构造DataLakeDirectoryClient供后续使用 const directoryClient = new DataLakeDirectoryClient(directorySasUrl); return { fileSystemClient, directoryClient }; }
注意:生成目录SAS令牌时必须授予列表权限,否则调用查询接口会返回403权限错误。
内容的提问来源于stack exchange,提问作者Elizabeth Fransen
相关产品推荐
相关产品推荐

