Autodesk Forge DB JSON文件URL路径异常问题咨询
一、路径异常的核心原因
这个问题本质是Viewer的离线加载逻辑依赖于在线环境下的资源目录结构。在线时,Forge衍生服务会把模型的属性数据文件(就是你提到的objects_*.json.gz系列)存放在特定的层级目录中,比如类似/derivatives/{urn}/{derivative-id}/objects_attrs.json.gz的路径。
Viewer的内置加载逻辑会默认尝试回溯两层目录去查找这些资源——这是为了适配在线时的资源路由规则。当你离线部署时,如果没有完全还原这个目录层级,Viewer就会错误地移除路径中的两层目录,同时因为它的 fallback 机制,当找不到压缩的.gz文件时,会自动尝试请求未压缩的.json版本,这就导致了你遇到的双重问题。
二、这些文件是否区分2D/3D?
你提到的objects_attrs.json.gz、objects_vals.json.gz等文件是2D和3D模型共用的核心属性数据文件,用来存储模型的属性键值对、ID映射、数据偏移量等基础信息,不管是Revit的3D模型还是AutoCAD的2D图纸,都会生成这些文件。
不过2D图纸可能会额外包含layers.json.gz(图层信息)、viewables.json.gz(视图配置)这类专属文件,但objects_*系列是通用的。
三、还有哪些类似的关键文件?
除了你列出的这些,离线加载时需要注意的同类型文件还有:
objects_vh.json.gz:模型属性的层级结构数据objects_frag.json.gz:模型片段的几何索引数据*.svf/*.svfz:模型的几何数据文件(3D模型核心,2D图纸也会有对应矢量数据的svf文件)manifest.json:模型的核心清单文件,Viewer首先会加载它来解析所有资源的路径- 纹理相关文件:如果模型包含材质纹理,会有
*.png/*.jpg等图片文件,路径规则和属性文件一致
四、更稳定的解决方案(替代临时hack)
严格还原在线目录结构
从Forge衍生服务下载模型资源时,务必保留原始的目录层级。比如用Forge CLI的forge models download命令,它会自动帮你下载完整资源并维持正确的目录结构,这样Viewer的默认加载逻辑就能正常工作,不需要额外修改。自定义资源加载器拦截请求
如果你无法调整目录结构,可以通过覆盖Viewer的ResourceLoader来手动修正路径和文件格式:// 初始化Viewer前覆盖资源加载逻辑 const originalLoadResource = Autodesk.Viewing.ResourceLoader.prototype.loadResource; Autodesk.Viewing.ResourceLoader.prototype.loadResource = function(options) { // 修正路径:移除不必要的两层目录回溯 if (options.url.includes('../../')) { options.url = options.url.replace('../../', './your-local-resource-path/'); } // 强制请求gz压缩文件,避免fallback到未压缩的json if (options.url.match(/objects_(attrs|vals|offs|ids|avs)\.json$/)) { options.url += '.gz'; } return originalLoadResource.call(this, options); }; // 之后正常初始化Viewer const viewer = new Autodesk.Viewing.GuiViewer3D(container); viewer.start();使用官方离线加载方案
Forge官方提供了离线加载的最佳实践,按照官方指南部署资源结构和加载逻辑,能从根源避免路径问题。
内容的提问来源于stack exchange,提问作者Alex Collins

