如何获取Autodesk Forge IDA中指定输出文件的Object ID
获取Autodesk Forge中sample.iam的Object ID与URN方法
1. 直接从OUTPUT文件夹获取sample.iam的Object ID
当sample.iam已直接存储在Forge的OUTPUT文件夹中时,按以下步骤操作:
- 调用Forge Data Management API的获取文件夹内容接口,传入OUTPUT文件夹的Object ID和有效的访问令牌。
- 在返回的文件列表中,筛选出名称为
sample.iam的条目,该条目的id字段即为目标文件的Object ID。 - 将获取到的Object ID进行Base64编码(需移除编码结果末尾的
=符号),得到的字符串就是用于Viewer加载模型的URN。
示例代码(JavaScript):
// 需提前获取有效的accessToken,以及OUTPUT文件夹的folderId和项目projectId async function getSampleIamInfo(folderId, projectId, accessToken) { const res = await fetch(`https://developer.api.autodesk.com/data/v1/projects/${projectId}/folders/${folderId}/contents`, { headers: { 'Authorization': `Bearer ${accessToken}` } }); const data = await res.json(); const targetFile = data.data.find(item => item.attributes.name === 'sample.iam' && item.type === 'items'); if (!targetFile) throw new Error('未找到sample.iam文件'); const objectId = targetFile.id; const urn = btoa(objectId).replace(/=/g, ''); // 生成符合要求的URN return { objectId, urn }; }
2. 从OUTPUT.zip内的OUTPUT文件夹获取sample.iam的Object ID
Forge无法直接读取ZIP文件内部内容,需先解压ZIP再获取文件信息:
- 调用Forge Data Management API的解压缩文件接口,传入OUTPUT.zip文件的Item ID、解压目标文件夹ID(可指定为原OUTPUT文件夹所在位置)和访问令牌,触发解压操作。
- 等待解压完成后,重复第一种场景的步骤:调用获取文件夹内容接口,在解压后的OUTPUT文件夹中找到
sample.iam,提取其Object ID并生成URN。
示例代码(JavaScript):
async function unzipAndGetSampleIam(zipItemId, targetFolderId, projectId, accessToken) { // 触发ZIP解压请求 const unzipRes = await fetch(`https://developer.api.autodesk.com/data/v1/projects/${projectId}/items/${zipItemId}/relationships/refreshes`, { method: 'POST', headers: { 'Authorization': `Bearer ${accessToken}`, 'Content-Type': 'application/vnd.api+json' }, body: JSON.stringify({ data: { type: 'refreshes', attributes: { refreshType: 'unzip' }, relationships: { target: { data: { type: 'folders', id: targetFolderId } } } } }) }); if (!unzipRes.ok) throw new Error('解压请求失败'); // 轮询等待解压完成(实际开发中需处理异步状态,可通过webhook或定时查询文件夹内容判断) await new Promise(resolve => setTimeout(resolve, 5000)); // 示例等待5秒,需根据实际调整 // 获取解压后文件夹内容 const folderRes = await fetch(`https://developer.api.autodesk.com/data/v1/projects/${projectId}/folders/${targetFolderId}/contents`, { headers: { 'Authorization': `Bearer ${accessToken}` } }); const folderData = await folderRes.json(); const targetFile = folderData.data.find(item => item.attributes.name === 'sample.iam' && item.type === 'items'); if (!targetFile) throw new Error('解压后未找到sample.iam文件'); const objectId = targetFile.id; const urn = btoa(objectId).replace(/=/g, ''); return { objectId, urn }; }
内容的提问来源于stack exchange,提问作者Siddhesh Nikam
相关产品推荐
相关产品推荐

