从 Autodesk A360 创建带有 URN 的查看器应用程序

Creating a viewer application with an URN from Autodesk A360

我创建了一个查看器应用程序,它使用两方验证并显示已上传到我自己的存储桶中的项目。现在,我不想查看我自己存储桶中的项目,而是希望能够查看已上传到 Autodesk A360 的项目。

为此,我完成了以下步骤:

因此,转换后的 URN 应该与 A360 用于其自己的查看器的相同。

在我自己的应用程序上查看带有 URN 的项目时,网络控制台显示以下错误消息:

查看具体请求时,返回如下响应:

我还确保转换后的 URN 与 A360 使用的 URN 相同。为此,我将其与 A360 的响应进行了比较:

所以由于查看器在A360中工作,我想知道A360中的项目是否也可以在我自己的应用程序中查看(A360查看器的存储桶已经存在,因此没有理由重复相同的存储桶创建和上传文件的过程)。 如果同一个项目可以使用URN,那么我也想知道为什么请求未授权。

如果您需要任何其他代码,请务必询问。

您可以在 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 roomedit3dv2 round-trip Forge BIM edi,8 分钟演示记录提供了它的工作证明:

https://www.youtube.com/watch?v=bDI5YX7PDP8

祝你好运!

https://github.com/Developer-Autodesk/data.management.api-nodejs-sample 将我的解决方案与 Augusto Goncalves 的应用程序进行比较后,我终于设法解决了问题。

  • Instead of downloading the project and uploading it to my own bucket, as described in https://developer.autodesk.com/en/docs/data/v2/tutorials/app-managed-bucket/, gotten the identificator (urn:adsk.wipprod:fs.file:vf.6bVr4EVDSaOpykczeQYR2Q?version=1) from the result of the file request and converted it to an URL-friendly Base64 (dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6bXktYnVja2V0L215LWF3ZXNvbWUtZm9yZ2UtZmlsZS5ydnQ=).

虽然此方法 returns 一个正确的 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"
  }'

这个请求的结果returns一个代码,必须添加到 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 headers 或依赖 WIPDM urn 直接加载您的可视内容。这将在将来的某个时候停止工作。我们会直接在衍生服务中添加一些逻辑,将其抽象出来,让你来做。

不幸的是,目前更喜欢使用 A360 项目版本中的存储 URN 和 post 自定义 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