处理 Autodesk Forge 查看器的错误

Posted

技术标签:

【中文标题】处理 Autodesk Forge 查看器的错误【英文标题】:Handle errors of the Autodesk Forge Viewer 【发布时间】:2017-01-11 18:54:06 【问题描述】:

我正在使用以下 javascript 代码在 Autodesk Forge Viewer 中显示模型:

var options = 
    'document': 'urn:' + urn,
    'env': 'AutodeskProduction',
    'getAccessToken': getToken,
    'refreshToken': getToken
;
Autodesk.Viewing.Initializer(options, function () 
    Autodesk.Viewing.Document.load(options.document,
        function (doc)  // onSuccessCallback
            // load the viewer
        ,
        function (errorCode)  // onErrorCallback
            interval = setInterval(function () 
                $.ajax(
                    url: 'https://developer.api.autodesk.com' + '/viewingservice/v1/' + urn,
                    type: 'GET',
                    headers:  Authorization: 'Bearer ' + getToken() ,
                    success: function (i) 
                        switch (i.status) 
                            case 'success':
                                // load the viewer
                                break;
                            case 'failed':
                            case 'timeout':
                                // report error
                                break;
                            case 'inprogress':
                                break;
                            default:
                                break;
                        
                    ,
                    error: function (b, d, e) 
                        // report error
                    
                );
            , 3000); // Repeatedly request the viewing service for each 3 seconds
        
    );
);

onSuccessCallback:它将在查看器中显示模型。

onErrorCallback:它会一直发布查看服务,直到它获得“成功”状态。如果状态为“失败”或“超时”,它将向用户报告他们无法查看此模型。

在 Autodesk.Viewing.Document.load(options.document) 之后,它会跳转到 errorCode==9('在获取的文档中没有可查看的内容')。然后我不断请求查看服务从中获取结果。这是错误代码列表:

var errorCodes = 
    1: 'An unknown failure has occurred.',
    2: 'Bad data (corrupted or malformed) was encountered.',
    3: 'A network failure was encountered.',
    4: 'Access was denied to a network resource (HTTP 403)',
    5: 'A network resource could not be found (HTTP 404)',
    6: 'A server error was returned when accessing a network resource (HTTP 5xx)',
    7: 'An unhandled response code was returned when accessing a network resource (HTTP "everything else")',
    8: 'Browser error: webGL is not supported by the current browser',
    9: 'There is nothing viewable in the fetched document',
    10: 'Browser error: webGL is supported, but not enabled',
    11: 'There is no geomtry in loaded model',
    12: 'Collaboration server error'
;

问题是有时它会返回 status=='failed'(在 Revit 中)或 status=='timeout'(在 Inventor 中)而没有更多详细信息。某些 Revit/Inventor 文件会发生这种情况,而不是所有情况。

我如何要求 Forge 查看服务重新翻译这些文件以显示回 Web 浏览器。他们总是从对查看服务的请求中失败。所以这些文件没有机会在 Forge 查看器中显示。

【问题讨论】:

【参考方案1】:

首先,非常重要的是,您不应该从客户端调用翻译。这意味着您的 getToken 方法返回一个具有 write 功能的令牌,因此恶意用户可以使用它来访问和修改您的文件。您的客户应该只看到只读令牌。考虑在服务器上使用写入令牌,在客户端使用读取令牌(对于autodesk-viewer)。

其次,您应该使用带有JOB endpoint 的autodesk-model-derivative API v2,其中MANIFEST endpoint 将为您提供翻译的完整描述(正在进行或完成/失败)。之前的 v1 view&data API 分为 Viewer(客户端)和 Model Derivative API(服务器),这让我们可以更好地控制服务器端的翻译,包括几个新的能力。

【讨论】:

我开始使用 v2 的 autodesk-model-derivative。我的代码使用了 View & Data API v1。谢谢。 太好了,如果这有帮助,请标记为已回答,或者如果您有任何其他问题,请告诉我【参考方案2】:

使用 v2 API:如果初始翻译失败,要重新提交翻译,您需要 delete 现有清单并重新提交 svf job。

使用 v1 API:您可以使用 'x-ads-force' = true 标志重新提交注册请求。示例见there。

【讨论】:

v1 API with 'x-ads-force' = true 不能帮助我修复错误。我正在迁移到 v2 API。

以上是关于处理 Autodesk Forge 查看器的错误的主要内容,如果未能解决你的问题,请参考以下文章

Autodesk Forge 跨域请求被阻止错误

无法获取 Forge 清单 - Autodesk Forge 查看器

Autodesk Forge 查看器 - GLTF 扩展

Forge 查看器:Autodesk.BoxSelection 扩展错误

如何以编程方式校准 Autodesk forge 查看器?

Autodesk Forge Viewer 和 React 组件