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

如何从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完成删除:
    1. 后端新增删除接口,使用合法的Access Token调用API删除指定URN对应的文件;
    2. 前端添加删除按钮,触发后端删除接口;
    3. 删除成功后,刷新Viewer或移除当前加载的模型实例。

内容的提问来源于stack exchange,提问作者Mahzabin Rashid Fariha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 08:42:34