You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Autodesk Viewer V7离线工作流加载缓存模型报错求助

解决Viewer V7离线加载模型时请求云端Manifest的问题

问题根源

Viewer V7的文档加载流程与V6不同,即便模型资源已被service-worker缓存,调用Autodesk.Viewing.Document.load或currentApp.loadDocument时,仍会默认向云端请求模型的manifest文件,导致离线状态下触发ERR_INTERNET_DISCONNECTED错误。

解决方案

1. 确保Service-Worker缓存全量资源

确认service-worker已缓存模型的manifest文件、SVF/SVF2几何文件、纹理/材质文件等所有衍生品资源。缓存路径需与Viewer在线加载时的请求路径完全匹配(可通过浏览器DevTools的Network面板查看路径规则)。

2. 绕过云端Document加载,直接加载本地缓存资源

放弃使用官方的Document加载方法,改为直接加载本地缓存的SVF/SVF2文件,示例代码如下:

export function loadModel_cache(urn) {
  let viewerError = document.getElementById("viewer-error");
  if (viewerError) {
    viewerError.parentNode.removeChild(viewerError);
  }

  function onLoadFailure() {
    viewerError = document.createElement("div");
    viewerError.id = "viewer-error";
    viewerError.innerHTML = "<span>无法加载文档,请检查是否处于离线状态?</span>";
    document.getElementById("preview").appendChild(viewerError);
    updateOverlay();
    console.error("加载模型失败:" + urn);
  }

  currentUrn = null;
  const status = document.querySelector(`#overlay > ul > li[data-urn="${urn}"] > .model-status`);
  status.style.setProperty("display", "inline");
  status.innerHTML = "(加载中...)";

  // 替换为service-worker缓存的SVF文件本地路径
  const localSvfPath = `/cached-models/${urn}/model.svf`;

  currentApp.loadModel(localSvfPath, {
    disableWorkerFetching: true, // 禁止Worker从云端拉取资源
    useConsolidation: false
  }).then(() => {
    currentUrn = urn;
    updateOverlay();
  }).catch(onLoadFailure);
}

3. 初始化Viewer时配置离线参数

启动Viewer时添加离线专属配置,强制优先使用本地缓存:

const viewer = new Autodesk.Viewing.GuiViewer3D(document.getElementById('preview'), {
  env: 'Local', // 标记为本地离线环境
  disableWebWorkerFetching: true,
  isAEC: false // 非AEC模型设为false,AEC模型需调整为true
});

4. 替代方案:构造离线Document对象

如果需要保留Document加载逻辑,可手动构造离线Document对象,避免云端请求:

function createOfflineDocument(urn, svfPath) {
  const doc = new Autodesk.Viewing.Document();
  doc.urn = `urn:${urn}`;
  doc.root = {
    search: () => [{
      data: {
        urn: svfPath,
        type: 'geometry'
      },
      getViewablePath: () => svfPath
    }]
  };
  return doc;
}

// 在loadModel_cache中使用
const offlineDoc = createOfflineDocument(urn, localSvfPath);
currentApp.loadDocumentNode(offlineDoc, offlineDoc.root.search({ type: 'geometry' })[0])
  .then(() => {
    currentUrn = urn;
    updateOverlay();
  })
  .catch(onLoadFailure);

关键注意事项

  • 缓存路径必须与Viewer请求路径完全一致,否则service-worker无法拦截请求。
  • 若使用SVF2格式模型,需额外缓存.svf2、.bubble.json、.bin等关联文件。
  • 测试离线功能前,需先在线加载模型,确保service-worker完成所有资源的缓存。

内容的提问来源于stack exchange,提问作者Tim Huang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 21:01:44