使用目录级SAS列出Azure Data Lake Gen2目录内容遇错求助
解决ADLS Gen2目录级SAS列出内容的问题
错误原因
核心问题是使用了错误的存储端点和API参数:
- 启用分层命名空间的ADLS Gen2存储账户,目录操作必须使用DFS端点(
dfs.core.windows.net),而非Blob端点(blob.core.windows.net)。 - Blob API的
restype参数不适用于ADLS Gen2的目录列表操作,需使用DFS API专属的resource参数。
正确解决方案
1. 替换存储端点
将原SAS URI中的blob.core.windows.net替换为dfs.core.windows.net。
2. 添加正确的查询参数
在SAS URI末尾追加&resource=directory&comp=list,用于指定目录内容的列出操作。
最终请求URI示例
https://testtest123test.dfs.core.windows.net/container/folder1/folder2/?sv=2024-11-04&se=2024-10-04T21%3A44%3A27Z&sr=d&sp=rl&sdd=2&sig=removed&resource=directory&comp=list
可选:递归列出所有子内容
如果需要递归获取folder2下所有层级的文件和子目录,添加&recursive=true参数即可:
https://testtest123test.dfs.core.windows.net/container/folder1/folder2/?sv=2024-11-04&se=2024-10-04T21%3A44%3A27Z&sr=d&sp=rl&sdd=2&sig=removed&resource=directory&comp=list&recursive=true
错误详情解释
- 第一个错误(
InvalidQueryParameterValue):Blob API不支持对ADLS Gen2目录使用comp=list参数,必须切换到DFS端点执行操作。 - 第二个错误(
InvalidUri):restype=container要求目标路径为容器级别,但你的SAS权限仅覆盖folder2目录,因此URI与权限范围不匹配。
内容的提问来源于stack exchange,提问作者Aws rayyan
相关产品推荐
相关产品推荐

