处理 Autodesk Forge Viewer 的错误

Handle errors of the Autodesk Forge 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:它会一直发布查看服务,直到它获得'success'状态。如果状态为'failed'或'timeout',它会向用户报告他们无法查看此模型。

Autodesk.Viewing.Document.load(options.document)后会跳转到errorCode==9('There is nothing viewable in the fetched document')。然后我不断请求查看服务以从中获取结果。这是错误代码列表:

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

问题有时是 returns status=='failed'(在 Revit 中)或 status=='timeout'(在 Inventor 中)而没有更多详细信息。它发生在某些 Revit/Inventor 个文件中,并非所有情况。

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

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

其次,您应该使用 API with the JOB endpoint, where the MANIFEST endpoint 的 v2 将为您提供翻译的完整描述(正在进行或 completed/failed)。之前的 v1 view&data API 分为 Viewer(客户端)和 Model Derivative API(服务器),这让我们更好地控制服务器端的翻译,包括几个新的能力。

对于 v2 API:如果初始翻译失败,要重新提交翻译,您需要 delete the existing manifest and resubmit a svf job

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