Azure Computer Vision API不支持带SAS令牌的Blob URL问题咨询
解决Azure Computer Vision API调用带SAS令牌的Blob URL返回Bad Request问题
我之前也碰到过一模一样的问题,给你几个靠谱的排查和解决方向,按顺序试下来基本能搞定:
1. 先确认SAS令牌本身没问题
- 权限必须包含读权限:生成SAS的时候,一定要勾选「读(Read)」权限(对应权限字符串里的
r)。Computer Vision需要读取Blob的内容,只给列表或其他权限肯定不行。 - 检查有效期:看看SAS的起始时间是不是还没到,或者已经过期了。比如你设置的起始时间是未来的某个点,那现在自然访问不了。
- 直接测试SAS URL:把带SAS的Blob URL复制到浏览器里,看看能不能正常打开图片。如果浏览器都打不开,那问题肯定出在SAS或者Blob本身,先把这个搞定再去调API。
2. 检查URL拼接格式是否正确
正确的格式应该是:https://<存储账户名>.blob.core.windows.net/<容器名>/<Blob文件名>?<SAS令牌>
- 注意不要在Blob URL和SAS之间多打问号,比如有些工具复制SAS的时候会自带一个
?,这时候要去掉Blob URL末尾可能多余的问号,避免出现??这种错误格式。 - 如果Blob文件名里有特殊字符(比如空格、中文),要确保已经做了URL编码,不然API解析的时候会出错。
3. 排查存储账户的防火墙/网络设置
如果你的存储账户设置了防火墙(比如只允许特定IP或虚拟网络访问),那Computer Vision服务的请求可能被拦截了:
- 可以先临时把存储账户的网络访问设置改成「允许所有网络访问」,测试API能不能正常调用。如果成功了,再把Computer Vision所在区域的服务IP加入存储账户的允许列表,或者配置虚拟网络服务端点来实现私有访问。
4. 验证API请求的参数和格式
- 确认Endpoint和密钥正确:检查请求用的Computer Vision Endpoint(比如
https://eastus.api.cognitive.microsoft.com/vision/v3.2/analyze)是否和你的订阅区域匹配,Ocp-Apim-Subscription-Key有没有拼写错误或者过期。 - 检查请求体格式:如果是用JSON传
url参数,确保字符串没有语法错误,比如引号是否配对,有没有多余的转义字符(除非URL本身需要转义)。举个正确的curl请求示例:
curl -X POST "https://eastus.api.cognitive.microsoft.com/vision/v3.2/analyze?visualFeatures=Categories,Description" \ -H "Content-Type: application/json" \ -H "Ocp-Apim-Subscription-Key: 你的订阅密钥" \ -d "{\"url\":\"https://你的存储账户.blob.core.windows.net/容器名/图片名.jpg?sv=2022-11-02&ss=bfqt&srt=sco&sp=r&se=2024-12-31T23:59:59Z&st=2024-01-01T00:00:00Z&spr=https&sig=你的SAS签名\"}"
5. 其他特殊情况排查
- 如果Blob用了客户管理的密钥加密,要确保Computer Vision服务能访问到对应的密钥,或者暂时切换成微软管理的密钥测试。
- 确认Blob的文件格式是Computer Vision支持的(比如JPG、PNG、BMP等),有些小众格式可能不被支持。
按这个顺序一步步排查,应该能找到问题所在。
内容的提问来源于stack exchange,提问作者Jayendran
相关产品推荐
相关产品推荐

