写明产物是单文件,多文件模型的兄弟资源拼接只算兜底

- packages/model3d-viewer:把 resolveModel3dViewerResourceUrl 的注释改成实话——产物是单文件(.glb 自带几何贴图,.fbx 媒体内嵌),多文件模型不会出现,最多是「模型 + 一个 bin」;这段补签名只是最后一层兜底,签名按单个文件签发时会被云端拒绝,不指望它能读成功
- docs/adr 0003:同一条前提写进 ADR,并写明将来真要支持多文件模型时应当由宿主为每个兄弟文件分别换取临时地址,而不是继续扩展这段拼接
This commit is contained in:
2026-09-24 19:18:10 +08:00
parent 5748cf303f
commit 647822bbc4
2 changed files with 12 additions and 5 deletions
+10 -5
View File
@@ -309,11 +309,16 @@ export function resolveModel3dViewerSourceQuery(
/**
* 给模型目录下的兄弟资源地址补回模型地址的鉴权 query。
*
* `GLTFLoader` / `FBXLoader` 用 `path + uri` 拼多文件模型的兄弟 buffer 与贴图地址,
* 地址落在模型目录里,但签名 token 在这一步丢掉了(目录本身不带 query),私有对象
* 于是 401/403。这里只补模型目录下的地址:既不把 token 外发到第三方 CDN,也不把
* 「为某个对象签出的 token」贴到同源的另一个对象上(OSS 会以 SignatureDoesNotMatch
* 拒绝),资源地址自己带的 query 也保留。
* 前提:站内的 3D 产物是单文件的——`.glb` 自带几何与贴图,`.fbx` 也按媒体内嵌处理;
* 「同目录另有 buffer / 贴图」的多文件模型不会出现,即使出现,兄弟文件也只会有
* 「模型 + 一个 bin」这一个。因此下面这段拼接只是最后一层兜底,不是对多文件模型的
* 支持:签名是按单个文件签的,把模型地址的 token 贴到另一个文件上,云端多半以
* SignatureDoesNotMatch 拒绝,读不到就是读不到,不指望它真能救回来。真要支持多文件
* 模型,得改成让宿主给每个兄弟文件分别换取各自的临时地址,而不是继续扩这段拼接。
*
* `GLTFLoader` / `FBXLoader` 用 `path + uri` 拼兄弟资源地址,签名 token 在这一步就丢了
* (目录本身不带 query),私有对象于是 401/403。这里只补模型目录下的地址:既不把 token
* 外发到第三方 CDN,资源地址自己带的 query 也保留。
*/
export function resolveModel3dViewerResourceUrl(input: {
url: string;