调用GET API无法获取容器文件列表,疑与sr=d及sdd=4参数有关
问题:Azure Blob存储List容器API调用报InvalidUri错误
问题详情
调用指定GET API时返回InvalidUri错误,推测和URL中的sr=d、sdd=4参数有关——另一组使用sr=c且无sdd参数的URL可正常发起请求,预期能列出容器中的文件。
GET请求端点
https://myaccount.blob.core.windows.net/xxx/yyy/zzz/xxx/yyy/?sp=rl&st=2022-08-01T12:19:00Z&se=2022-10-01T12:19:00Z&spr=https&sv=2021-06-08&sr=d&sig=xxxxxx&sdd=4&comp=list&restype=container
错误信息
<?xml version="1.0" encoding="utf-8"?> <Error> <Code>InvalidUri</Code> <Message>The requested URI does not represent any resource on the server. RequestId:1f1dda37-c01e-0118-457d-b24d16000000 Time:2022-08-16T14:35:50.3635803Z</Message> </Error>
问题原因及解决方案
原因分析
sr参数冲突:sr是SAS token中的资源类型标识:sr=c代表目标资源是容器(Container)sr=d代表目标资源是目录(Directory),仅适用于启用分层命名空间的存储账户
但请求中同时指定了restype=container(容器级List操作)和sr=d(目录资源),二者矛盾导致URI无效。
sdd参数不适用:sdd=4是针对目录资源的删除行为参数,在容器级List请求中无意义,属于多余参数。
解决方案
如果目标是列出容器内容,直接调整参数:
- 将SAS token中的
sr=d改为sr=c - 移除
sdd=4参数
调整后的请求URL示例:
https://myaccount.blob.core.windows.net/xxx/yyy/zzz/xxx/yyy/?sp=rl&st=2022-08-01T12:19:00Z&se=2022-10-01T12:19:00Z&spr=https&sv=2021-06-08&sr=c&sig=xxxxxx&comp=list&restype=container
内容的提问来源于stack exchange,提问作者Jake
相关产品推荐
相关产品推荐

