处理Autodesk Forge Viewer的错误

时间:2016-09-04 02:24:45

标签: autodesk-forge autodesk-viewer

我使用以下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('在获取的文档中没有任何可查看的内容')。然后我继续请求查看服务以从中获取结果。这是errorCode列表:

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'
};

问题有时会返回状态=='失败'(在Revit中)或状态=='超时'(在Inventor中)而没有更多细节。它适用于某些Revit / Inventor文件,而不是所有情况。

如何让Forge查看服务重新翻译这些文件以显示回Web浏览器。他们总是从请求到查看服务失败。因此,这些文件无法在Forge查看器中显示。

2 个答案:

答案 0 :(得分:1)

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

其次,您应该将 API的v2与JOB endpoint一起使用,其中MANIFEST endpoint将为您提供翻译的完整描述(正在进行或已完成/失败) )。之前的v1视图和数据API分为Viewer(客户端)和Model Derivative API(服务器),这使我们能够更好地控制服务器端转换,包括几个新功能。

答案 1 :(得分:0)

使用v2 API:要在初始转换失败时重新提交转换,您需要delete现有清单并重新提交svf job

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