通过Azure Logic App上传图片至Azure Custom Vision时遇400错误
解决Azure Logic App向Custom Vision上传图片的400错误
根据你提供的BadRequestImageStream(流为空)错误信息,结合Postman可正常运行的情况,问题集中在API端点格式错误、请求体传递方式不当以及冗余请求头干扰几个方面,以下是具体修复步骤:
1. 修正API端点URI的格式错误
你的请求URI存在两处关键问题:
- 缺少Custom Vision预测资源的完整域名:
cognitiveservices.后需补充区域后缀(如.azure.com) Prediction后缺失项目ID,且多了一个无效斜杠:正确格式应为/Prediction/{你的项目ID}/detect/...
修正后的URI示例:
https://anonymized-prediction.cognitiveservices.azure.com/customvision/v3.0/Prediction/xxxxxxxxx/detect/iterations/Iteration1/image
2. 调整请求体的传递方式
当前请求体使用了Logic App的Base64包装格式($content-type+$content),但请求头指定的是application/octet-stream,这会导致Custom Vision无法正确解析流。如果是从Blob Storage获取图片,直接将Blob的二进制内容作为请求体即可:
- 在Logic App的HTTP动作中,将Body设置为
@body('Get_Blob_Content')(假设你使用了"Get Blob Content"动作获取Blob) - 无需手动转换Base64,也不需要
$content-type和$content的包装结构
3. 清理冗余请求头
移除不必要的请求头,只保留Custom Vision需要的核心头:
"headers": { "Content-Type": "application/octet-stream", "Prediction-Key": "你的预测密钥" }
Accept-Encoding、Connection等头在Logic App中会自动处理,手动添加可能导致流压缩或传输异常,引发空流错误。
4. 验证请求体完整性
在HTTP动作前添加条件检查,确认Blob内容不为空:
- 新增"Condition"动作,判断
length(body('Get_Blob_Content')) > 0 - 仅当条件成立时才执行Custom Vision的HTTP请求,避免传递空流
修正后的请求示例
{ "uri": "https://anonymized-prediction.cognitiveservices.azure.com/customvision/v3.0/Prediction/你的项目ID/detect/iterations/Iteration1/image", "method": "POST", "headers": { "Content-Type": "application/octet-stream", "Prediction-Key": "你的预测密钥" }, "body": "@body('Get_Blob_Content')" }
内容的提问来源于stack exchange,提问作者Fagborg
相关产品推荐
相关产品推荐

