使用 Autodesk A360 中的 URN 创建查看器应用程序
Posted
技术标签:
【中文标题】使用 Autodesk A360 中的 URN 创建查看器应用程序【英文标题】:Creating a viewer application with an URN from Autodesk A360 【发布时间】:2016-10-16 13:16:56 【问题描述】:我创建了一个查看器应用程序,它使用 2-legged 身份验证并显示已上传到我自己的存储桶的项目。现在,我不想查看自己存储桶中的项目,而是希望能够查看已上传到 Autodesk A360 的项目。
为此,我已完成以下步骤:
实现了三腿认证(项目的A360账户和正在认证的账户是一样的)。 已访问集线器、项目和文件,如https://developer.autodesk.com/en/docs/data/v2/tutorials/download-file/ 中所述。 而不是下载项目并将其上传到我自己的存储桶中,如https://developer.autodesk.com/en/docs/data/v2/tutorials/app-managed-bucket/ 中所述,获取了标识符 (urn:adsk.wipprod:fs.file:vf.6bVr4EVDSaOpykczeQYR2Q?version=1
) 从文件请求的结果中转换为 URL 友好的 Base64 (dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6bXktYnVja2V0L215LWF3ZXNvbWUtZm9yZ2UtZmlsZS5ydnQ=
)。
因此,转换后的 URN 应该与 A360 用于其自己的查看器的 URN 相同。
在我自己的应用程序上使用 URN 查看项目时,网络控制台显示以下错误消息:
查看具体请求时,返回如下响应:
我还确保转换后的 URN 等于 A360 正在使用的 URN。为此,我将其与 A360 的响应进行了比较:
所以由于查看器在A360中工作,我想知道A360中的项目是否也可以在我自己的应用程序中查看(A360查看器的存储桶已经存在,因此没有理由重复相同的过程存储桶的创建和文件的上传)。 如果可以使用与URN相同的项目,那么我也想知道为什么请求是未经授权的。
如果您需要任何其他代码,请务必询问。
【问题讨论】:
【参考方案1】:您可以在 GiHub 上查看以下三个示例,这三个示例都可以访问 A360 上的 CAD 模型并在查看器中显示它们:
数据管理 APIP 示例:https://github.com/Developer-Autodesk/data.management.api-nodejs-sample
模型衍生 API 示例:https://github.com/Developer-Autodesk/model.derivative.api-nodejs-sample
实时往返 BIM 编辑器:https://github.com/jeremytammik/model.derivative.api-nodejs-sample-roomedit3d
roomedit3dv2 往返 Forge BIM edi 提供了它的工作证明,8 分钟演示记录:
https://www.youtube.com/watch?v=bDI5YX7PDP8
祝你好运!
【讨论】:
数据管理 API 示例和模型衍生 API 示例提供以下错误消息:"developerMessage":"The authorization code/refresh token is expired or invalid/redirect_uri must have the same value as in the authorization request.","userMessage":"","errorCode":"AUTH-004","more info":"http://developer-stg.api.autodesk.com/documentation/v1/errors/AUTH-004"
我昨天也看到了这条消息。对于那个很抱歉。我会问我的同事。
我昨天通过清除缓存并重新加载来修复它,但尝试了几次。我希望它在我的 Forge DevCon 演示期间效果更好!
@danrodi:在开发者门户创建开发者密钥和秘密时,您需要指定“回调 URL”。然后,在您的 OAuth 代码中,您必须使用相同的 URL。你能检查一下吗?
@AugustoGoncalves 我指定了回调 URL,并且还在我的 OAuth 代码中使用了相同的 URL。唯一的问题是,端口的 * 是否可以接受。【参考方案2】:
在将我的解决方案与 https://github.com/Developer-Autodesk/data.management.api-nodejs-sample 的 Augusto Goncalves 申请进行比较后,我终于设法解决了问题。
不像https://developer.autodesk.com/en/docs/data/v2/tutorials/app-managed-bucket/中所述的那样下载项目并将其上传到我自己的存储桶,而是从文件请求的结果中获取标识符(urn:adsk.wipprod:fs.file:vf.6bVr4EVDSaOpykczeQYR2Q?version=1
)并将其转换为URL友好的Base64(@987654325 @)。
虽然此方法返回正确的 URN,但除了 URN 之外,还必须将 acmsession
添加到请求中。从上面的示例代码中,我设法对以下请求进行了逆向工程:
curl -X 'POST' \
-H "Authorization: Bearer $token" -H 'Content-Type: application/json' \
-v 'https://developer.api.autodesk.com/oss-ext/v1/acmsessions' -d \
'
"application": "autodesk",
"x-ads-acm-check-groups": "true",
"x-ads-acm-namespace": "WIPDM"
'
此请求的结果返回一个代码,该代码必须添加到 URN。不应将其添加到请求 URL 的末尾,而应将其添加到正在调用的方法中:
viewer.load(doc.getViewablePath(geometryItems[0]), null, null, null, doc.acmSessionId /*session for DM*/);
使用此解决方案需要对查看器的实例化进行更改。我没有像https://developer.autodesk.com/en/docs/viewer/v2/tutorials/basic-viewer/ 中描述的那样进行操作,而是将其更改为上面示例代码的index.js
文件中的解决方案。
【讨论】:
谢谢!我认为这应该记录在案! 我上面回答的哪一部分你不清楚?没有记录是有充分理由的。您不应该使用您描述的 ACM 命名空间方法,因为它会在未来的某个时候停止工作。让我重复一下我之前所说的话:我已经从开发人员那里得到确认,您不应该使用 ACM 标头或依赖 WIPDM urn 来直接加载您的可视项。我们将直接在衍生服务中添加一些逻辑来抽象它并允许您这样做。目前更喜欢使用 A360 项目版本中的存储 URN 并发布自定义 svf 作业【参考方案3】:开发团队已确认您不应使用 ACM 标头或依赖 WIPDM urn 直接加载您的可视项。这将在未来的某个时候停止工作。我们会在派生服务中直接添加一些逻辑来抽象它并允许你这样做。
不幸的是,目前更喜欢使用 A360 项目版本中的存储 URN 并发布自定义 svf 作业,该作业将生成一组您可以依赖的新可视项。
你可以在我的forge sample看到一个具体的例子
//pick the last version by default
var version = item.versions[ item.versions.length - 1 ]
var storageUrn = window.btoa(
version.relationships.storage.data.id)
// !IMPORTANT: remove all padding '=' chars
// not accepted by the adsk services
storageUrn = storageUrn.replace(new RegExp('=', 'g'), '')
var urn = version.relationships.derivatives.data.id
console.log('A360 URN: ' + urn) // -> just for info
console.log('Storage URN: ' + storageUrn) // -> use this URN to POST svf and trigger translation
【讨论】:
以上是关于使用 Autodesk A360 中的 URN 创建查看器应用程序的主要内容,如果未能解决你的问题,请参考以下文章
Autodesk Forge - 发布作业 - 必须将文件放在存储桶中并使用正确的URN
爆炸功能不适用于 Autodesk forge 中的几种格式?