处理 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 功能的令牌,因此恶意用户可以使用它来访问和修改您的文件。您的客户应该只能看到只读令牌。考虑在服务器上使用写入令牌并在客户端上使用读取令牌(对于 autodesk-viewer)。
其次,您应该使用 autodesk-model-derivative 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。
我正在使用以下 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 功能的令牌,因此恶意用户可以使用它来访问和修改您的文件。您的客户应该只能看到只读令牌。考虑在服务器上使用写入令牌并在客户端上使用读取令牌(对于 autodesk-viewer)。
其次,您应该使用 autodesk-model-derivative 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。