NextJS 14集成APS Viewer缓存问题:同名模型更新仍显示旧模型
解决APS Viewer同名模型上传后显示旧内容的缓存问题
以下是针对你遇到的缓存问题的具体排查和解决步骤:
一、验证翻译作业是否真正重新生成了模型
你已经设置了x-ads-force: true,但需要确认该请求头是否生效,且翻译作业确实生成了新的模型文件:
- 调用Model Derivative API的
GET /modelderivative/v2/designdata/{urn}/manifest接口,检查返回的manifest中derivatives字段的urn或timestamp是否更新,同时确认status为success、progress为complete,确保新模型翻译完成。 - 检查
createTranslationJob中axios的请求头是否被正确传递,可通过打印请求日志或添加axios拦截器确认x-ads-force未被篡改。
二、强化Viewer端的缓存清除策略
当前的Autodesk.Viewing.HTTP_REQUEST_HEADERS设置时机过晚,且缺少部分缓存控制参数,修改initViewer函数如下:
export const initViewer = async (divId: string) => { let viewer: Autodesk.Viewing.GuiViewer3D; const getClientToken = await Client.getAccesstoken(); const tolkenData = getClientToken.data; const tolken = tolkenData.access_token; // 提前设置请求头,确保Viewer初始化时即生效 Autodesk.Viewing.HTTP_REQUEST_HEADERS = { "If-Modified-Since": "Sat, 29 Oct 1994 19:43:31 GMT", "Cache-Control": "no-cache, no-store, must-revalidate", "Pragma": "no-cache" }; // 清除Viewer内部缓存 Autodesk.Viewing.clearCache(); const options = { env: 'AutodeskProduction2', api: 'streamingV2', accessToken: tolken, }; await Autodesk.Viewing.Initializer(options, () => { const config3d = { extensions: [], // 禁用Viewer内置的缓存项 disableBimWalkInfoCache: true, disableMetadataCache: true }; const htmlDiv = document.getElementById(divId); viewer = new Autodesk.Viewing.GuiViewer3D(htmlDiv!, config3d); const startedCode = viewer.start(); if (startedCode > 0) { console.error('Failed to create a Viewer: WebGL not supported.'); } console.log('Initialization complete, loading a model next...'); }); return viewer!; }
三、加载模型时强制跳过缓存
在调用viewer.loadDocumentNode加载模型时,添加loadOptions参数强制跳过本地缓存:
// 假设已获取document和viewable对象 viewer.loadDocumentNode(document, viewable, { loadOptions: { skipPropertyDbCache: true, // 跳过属性数据库缓存 skipGeometryCache: true, // 跳过几何数据缓存 useConsolidatedManifest: false // 禁用合并缓存 } });
四、确认存储桶文件已被正确覆盖
检查OSS存储桶中目标文件的ETag是否与新文件一致,确认上传操作确实覆盖了旧文件——部分存储服务默认开启版本控制,若未关闭,同名上传会保留旧版本,导致翻译时仍读取旧文件内容。
内容的提问来源于stack exchange,提问作者Gabriel Jordan
相关产品推荐
相关产品推荐

