使用Azure CLI加SAS令牌下载存储Blob时报BlobNotFound错误如何解决?
Azure CLI下载Blob报BlobNotFound问题修复方案
1. 修正命令语法错误
你提供的原始命令存在两处明显语法问题:
$containername参数与后续的--account-name参数之间缺少空格,Azure CLI会将二者拼接为错误的容器名称,无法匹配到正确的容器-f(本地输出路径参数)重复定义,你同时填写了-f aztest和-f tempfile,参数冲突会导致CLI无法正确解析执行逻辑
修正后的PowerShell环境命令格式如下:
az storage blob download ` -c $containername ` --account-name $storageaccountname ` --name $filepathwithname ` -f ./tempfile ` --sas-token $SAStoken
2. 处理路径中的特殊字符
你的Blob路径包含$符号,这是PowerShell的变量标识符,如果你用双引号定义$filepathwithname,PowerShell会自动将$2021当作变量解析,若未提前定义该变量,最终传入CLI的路径会变为sql/folder1/folder2/targetfile,自然找不到目标Blob。
修复方案:定义路径变量时使用单引号包裹,PowerShell单引号不会解析内部的特殊字符:
# 单引号包裹路径,避免$被识别为变量前缀 $filepathwithname = 'sql$2021/folder1/folder2/targetfile'
3. 校验SAS令牌权限
如果上述两项修正后仍报错,请检查SAS令牌配置:
- 令牌必须授予目标Blob的**读取(r)**权限
- 令牌的有效期未过期
- 令牌的允许IP范围包含当前执行脚本的机器公网IP
- 令牌的资源类型配置包含Blob存储
前置排查命令
你可以先执行以下命令验证Blob路径是否可被正常识别,确认路径和权限无问题后再执行下载操作:
az storage blob exists ` -c $containername ` --account-name $storageaccountname ` --name $filepathwithname ` --sas-token $SAStoken
返回结果中exists字段为true则代表路径和权限配置正常。
内容的提问来源于stack exchange,提问作者RatKing
相关产品推荐
相关产品推荐

