首页 > 解决方案 > 当我使用 php-client-forge autodesk api 时,404 错误连接到 API (https://developer.api.autodesk.com/modelderivative/v2/designdata/job)

问题描述

我想在我的 php 应用程序中使用 autodesk forge viewer api 来查看 ifc 文件,所以我使用了 forge-php-client sdk.everything 工作正常,但翻译工作没有,我收到此错误:[404 ] 连接到 API 时出错(https://developer.api.autodesk.com/modelderivative/v2/designdata/job 这里的代码:

/step1

        Configuration::getDefaultConfiguration()
                ->setClientId('xxxxxxxxxxxxxxxxxxxxxx')
                ->setClientSecret('xxxxxxxxxxxxxxxxxx');

        $twoLeggedAuth = new TwoLeggedAuth();
        $twoLeggedAuth->setScopes( [ 'bucket:create' ] );    

        $twoLeggedAuth->fetchToken();

        $tokenInfo = [
           'accessToken' => $twoLeggedAuth->getAccessToken(),
           'expiry'           => time() + $twoLeggedAuth->getExpiresIn(),
        ];

        //step2

        $twoLeggedAuth->setScopes( [ 'bucket:create' ] );
        $twoLeggedAuth->fetchToken();

        $apiInstance = new BucketsApi( $twoLeggedAuth );

        $bucket_info = array(
        'bucket_key' => 'nebnibim5'.time(),  
        'policy_key' => 'transient' 
        );
        $post_buckets = new PostBucketsPayload( $bucket_info );


        $result = $apiInstance->createBucket( $post_buckets, null );





        $twoLeggedAuth = new TwoLeggedAuth();
        $twoLeggedAuth->setScopes( [ 'data:write' ] );

        $twoLeggedAuth->fetchToken();

        $apiInstance = new ObjectsApi( $twoLeggedAuth );
        $bucket_key = $bucket_info['bucket_key']; 

        $filename = 'C:\wamp\www\nebnibim\storage\app\bibliothequeObjets\user69\13111006_IFCR2_Geo_Openings_1.ifc '; 
        $body = $filename;
        $file = new SplFileObject( $body );
        $content_length = $file->getSize();   
        $object_name = $file->getFilename();  

        //try {
        $result2 = $apiInstance->uploadObject( $bucket_key, $object_name, $content_length, $body, null, null );



        //step4
        $urn = 'urn:adsk.objects:os.object:nebnibim51548575979/13111006_IFCR2_Geo_Openings_1.ifc';
        $base64Urn = rtrim( strtr( base64_encode( $urn ), '+/', '-_' ), '=' );

        $twoLeggedAuth->setScopes( [ 'data:read', 'data:write' ] );
        $twoLeggedAuth->fetchToken();

        $apiInstance2 = new DerivativesApi( $twoLeggedAuth );

        $jobInput = array(
        'urn' => 'dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6bmVibmliaW01MTU0ODU3NTk3OS8xMzExMTAwNl9JRkNSMl9HZW9fT3BlbmluZ3NfMS5pZmM'
        );

        $jobPayloadInput = new JobPayloadInput( $jobInput );

        $jobOutputItem = array(
        'type' => 'svf',
        'views' => array( '2d', '3d' )
        );

        $jobPayloadItem = new JobPayloadItem( $jobOutputItem );

        $jobOutput = [
        'formats' => array( $jobPayloadItem )        

        ];

        $jobPayloadOutput = new JobPayloadOutput( $jobOutput );


        $job = new JobPayload();

        $job->setInput( $jobPayloadInput );
        $job->setOutput( $jobPayloadOutput );
        $x_ads_force = false;

        $resultat= $apiInstance2->translate( $job,$x_ads_force );

标签: phpautodesk-forge

解决方案


看起来您仍在上传到以系统时间命名的存储桶,只是在硬编码的 urn 上调用作业,指向之前上传到另一个存储桶的对象 - 这总是会导致 404 错误,因为 urn 不正确。

按照此处的代码示例文档获取现有存储桶的内容列表,验证对象在您的存储桶中查询时确实存在,获取返回的保证是最新且正确的 objectId,然后从那里开始。

您需要在 24 小时后再次上传文件,因为您创建的存储桶是transient. 请参阅此处了解更多信息 - 这应该是我们现在看到的错误的原因。


推荐阅读