已有modelGuid和projectGuid,如何从Autodesk Cloud取模型并在Viewer3D展示?
云端Revit项目在Autodesk Viewer中展示的实现方案
前置要求
- 你的Forge应用已完成认证,且获得对应ACC/BIM 360项目的
viewables:read权限(注意这是云端项目专属权限,和OSS存储桶权限不通用) - 已拿到有效的
projectGuid和modelGuid(ACC项目ID是长字符串,BIM 360是数字开头的ID)
具体实现步骤
1. 获取模型的可查看资源ID(Viewable ID)
不需要走本地文件上传转换的流程,直接通过Forge Data Management API查询:
- 先调用
GET /data/v1/projects/{projectGuid}/items/{modelGuid}/versions,获取该模型的最新版本ID - 再调用
GET /data/v1/projects/{projectGuid}/versions/{versionId},从返回结果里提取relationships.viewable.data.id,这就是你要的Viewable ID
2. 生成Viewer专用访问令牌
调用Forge认证接口获取2-legged令牌,必须包含data:read和viewables:read权限范围,同时指定令牌的受众(audience)为目标项目的URN:
- BIM 360项目受众格式:
urn:adsk.dtm:{projectGuid} - ACC项目受众格式:
urn:adsk.aec:project:{projectGuid}
3. 初始化Autodesk Viewer
前端代码里用拿到的令牌和Viewable ID构造正确的URN,初始化Viewer:
const initOptions = { env: 'AutodeskProduction2', // 云端项目必须用这个环境 accessToken: '你的2-legged令牌' }; Autodesk.Viewing.Initializer(initOptions, () => { const viewerContainer = document.getElementById('viewer-container'); const viewer = new Autodesk.Viewing.GuiViewer3D(viewerContainer); viewer.start(); // 构造云端模型的URN const viewableUrn = `urn:adsk.viewing:fs.file:${viewableId}/output/`; Autodesk.Viewing.Document.load( viewableUrn, (doc) => { const defaultView = doc.getRoot().getDefaultGeometry(); viewer.loadDocumentNode(doc, defaultView); }, (err) => { console.error('模型加载失败:', err); } ); });
常见错误排查
- 403权限错误:检查你的Forge应用是否被添加到目标ACC/BIM 360项目中,或者令牌的权限范围是否包含
viewables:read - URN格式错误:云端模型的URN必须带
/output/后缀,不能用本地OSS的URN格式 - 环境参数错误:初始化Viewer时必须指定
AutodeskProduction2,用默认环境会导致云端资源加载失败 - 版本ID混淆:不要直接用
modelGuid当版本ID,必须先查询模型的最新版本ID再调用接口
内容的提问来源于stack exchange,提问作者Gustavo da Costa e Silva
相关产品推荐
相关产品推荐

