BIM 360/ACC文件浏览器查看及Model Derivative API调用问题求助
问题1:BIM 360/ACC文件翻译状态查询返回null
可能原因
- URN重复编码:Data API返回的文件URN(通常在
relationships.derivatives.data.id字段)已经是Base64编码格式,二次编码会导致无效的URN,接口无法识别。 - 权限不足:AccessToken未包含
data:read和modelderivative:read权限范围,导致接口拒绝访问。 - 翻译未触发/未完成:虽然文档说明BIM 360/ACC文件会自动生成SVF/SVF2,但刚上传的文件可能需要几分钟完成翻译,或某些场景下需手动触发。
- CURL请求异常:自定义的
curlsent函数可能存在错误(如网络问题、URL拼接错误),导致请求失败返回null。
解决方案
- 检查URN编码:输出从Data API获取的原始URN,确认是否已为Base64格式(通常以
dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6...开头)。如果已编码,移除base64_encode($urn)这一步。 - 验证AccessToken权限:生成token时确保包含
data:read和modelderivative:readscope。 - 等待或手动触发翻译:若文件刚上传,等待5-10分钟后再查询;若始终无翻译记录,可调用Model Derivative的翻译接口手动触发(即使是BIM 360/ACC文件,也支持手动触发)。
- 调试CURL请求:在
curlsent函数中添加错误日志,输出HTTP状态码和响应内容,排查请求失败原因。例如:function curlsent($url, $postData, $headers, $method='get') { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); if($method === 'post') { curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); } $response = curl_exec($ch); if(curl_errno($ch)) { error_log('CURL Error: ' . curl_error($ch)); } error_log('HTTP Status Code: ' . curl_getinfo($ch, CURLINFO_HTTP_CODE)); curl_close($ch); return $response; }
问题2:OSS上传后调用翻译接口返回bool(false)
可能原因
- URN编码不规范:Base64编码后的URN未做URL安全处理(未替换
+为-、/为_,未移除末尾=),导致接口无法识别。 - 请求体参数错误:
rootFilename设置为.iam,但上传的是DWG文件,参数与实际文件不匹配。compressedUrn设为true,但上传的不是压缩包(如ZIP),参数无效。
- CURL请求失败:
curl_exec返回false通常是请求本身出错,如SSL证书问题、URL错误、超时等。 - 区域或权限问题:AccessToken未包含
bucket:read和modelderivative:create权限,或bucket区域与翻译API区域不匹配。
解决方案
- 规范URN编码:对原始URN进行Base64编码后,做URL安全处理:
$encodedUrn = rtrim(strtr(base64_encode($urn), '+/', '-_'), '='); - 修正请求体参数:移除无效参数,匹配实际文件信息:
$body = array( "input" => array( "urn" => $encodedUrn ), "output" => array( "destination" => array( "region" => $region ), "formats" => array( array( "type"=>"svf2", "views"=>array("2d", "3d") ) ) ) ); - 添加CURL错误调试:在
curl_exec后添加错误日志,排查具体问题:$response = curl_exec($curl); if($response === false) { error_log('CURL Error: ' . curl_error($curl)); error_log('HTTP Status Code: ' . curl_getinfo($curl, CURLINFO_HTTP_CODE)); } curl_close($curl); - 验证权限和区域:确保AccessToken包含
bucket:read和modelderivative:createscope,且bucket区域(EMEA)与翻译API区域(eu)一致。
内容的提问来源于stack exchange,提问作者jian zhang
相关产品推荐
相关产品推荐

