如何从Autodesk Viewer下载原始格式文件而非.SVF格式
问题解答
1. 下载原始格式文件而非SVF
可以直接从Autodesk服务器获取原始文件,无需自行存储到S3。修改现有代码的核心是获取原始文件的衍生URN,而非SVF的URN,具体调整如下:
后端代码修改
当前代码在manifest中查找了role: "graphics"的衍生文件(对应SVF格式),现在替换为查找原始文件的条目:
router.get("/api/model-download-url", async (req, res) => { const { urn } = req.query; if (!urn) { return res.status(400).json({ error: "Missing URN" }); } const { access_token } = await getInternalToken(); const manifest = await getManifest(urn); // 替换:查找上传的原始文件条目(isRoot为true的即为原始文件) const originalDerivative = manifest?.derivatives?.find(deriv => deriv.isRoot === true); if (!originalDerivative) { return res.status(404).json({ error: "Original file not found in manifest" }); } const derivativeUrn = originalDerivative.urn; try { const response = await fetch( `https://developer.api.autodesk.com/modelderivative/v2/designdata/${urn}/manifest/${derivativeUrn}/signedcookies`, { method: "GET", headers: { Authorization: `Bearer ${access_token}`, }, } ); const data = await response.json(); const url = data.url; const setCookieHeaders = response.headers.getSetCookie(); if (!setCookieHeaders || setCookieHeaders.length === 0) { console.error("No Set-Cookie headers found"); return res.status(500).json({ error: "No Set-Cookie headers found" }); } let signedParams = {}; setCookieHeaders.forEach((cookie) => { // 修复原代码的Cookie解析错误:先按"; "分割,再提取键值对 const [keyPart] = cookie.split("; "); const [key, value] = keyPart.split("="); if (key.startsWith("CloudFront-")) { signedParams[key.replace("CloudFront-", "")] = value; } }); if ( !signedParams["Key-Pair-Id"] || !signedParams["Policy"] || !signedParams["Signature"] ) { return res.status(500).json({ error: "Missing signed query parameters" }); } const signedUrl = `${url}?Key-Pair-Id=${signedParams["Key-Pair-Id"]}&Policy=${signedParams["Policy"]}&Signature=${signedParams["Signature"]}`; res.json({ signedUrl }); } catch (error) { console.error("Error fetching signed cookies:", error); res.status(500).json({ error: error.message }); } });
前端代码无需调整
前端的handleDownload逻辑保持原样即可,后端返回的签名URL会自动指向原始格式文件。
2. 删除Viewer中的文件
- Viewer默认下拉菜单无删除功能:Viewer仅负责模型的加载与展示,本身不提供删除服务器文件的选项。
- 浏览器无法直接删除服务器文件:文件存储在Autodesk的云端服务器,前端浏览器没有权限直接操作删除。
- 实现删除的可行方案:需通过后端调用Data Management API完成删除:
- 后端新增删除接口,使用合法的Access Token调用API删除指定URN对应的文件;
- 前端添加删除按钮,触发后端删除接口;
- 删除成功后,刷新Viewer或移除当前加载的模型实例。
内容的提问来源于stack exchange,提问作者Mahzabin Rashid Fariha
相关产品推荐
相关产品推荐

