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

如何通过Autodesk API实现DWG转DXF格式转换?

DWG转DXF:基于Autodesk Model Derivative API的优化方案

针对你提到ODA File Converter并非最优选择的情况,使用Autodesk Model Derivative API确实是更适合自动化场景的转换方案,你提供的代码已经搭建了核心框架,这里补充几个关键细节和完善建议:

  • URN格式要求:代码中传入的dwgFile必须是文件上传至Autodesk OSS后的URN,且需经过Base64 URL安全编码(需去掉编码末尾的=符号)
  • 异步任务处理:Model Derivative API的转换是异步执行的,仅提交任务无法直接获取结果,需要轮询任务状态直至转换完成
  • 凭证有效性:确保CLIENT_ID和CLIENT_SECRET是Autodesk开发者平台创建应用后获取的有效凭证

以下是包含状态查询逻辑的完善版示例代码:

const axios = require('axios');

// 替换为你的应用凭证
const CLIENT_ID = '你的客户端ID';
const CLIENT_SECRET = '你的客户端密钥';

// 获取访问令牌
async function getAccessToken() {
  const response = await axios.post('https://developer.api.autodesk.com/authentication/v1/authenticate', 
    new URLSearchParams({
      client_id: CLIENT_ID,
      client_secret: CLIENT_SECRET,
      grant_type: 'client_credentials',
      scope: 'data:read data:write data:create bucket:create bucket:read'
    }), {
      headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
      }
    });

  return response.data.access_token;
}

// 提交DWG转DXF转换任务
async function convertDWGtoDXF(dwgUrn) {
  const accessToken = await getAccessToken();

  const response = await axios.post('https://developer.api.autodesk.com/modelderivative/v2/designdata/job', {
    input: {
      urn: dwgUrn
    },
    output: {
      formats: [
        {
          type: 'dxf',
          views: ['2d']
        }
      ]
    }
  }, {
    headers: {
      'Authorization': `Bearer ${accessToken}`,
      'Content-Type': 'application/json'
    }
  });

  return response.data;
}

// 查询转换任务状态
async function checkConversionStatus(urn, accessToken) {
  const response = await axios.get(`https://developer.api.autodesk.com/modelderivative/v2/designdata/${urn}/manifest`, {
    headers: {
      'Authorization': `Bearer ${accessToken}`
    }
  });

  return response.data;
}

// 完整转换流程(含状态轮询)
async function fullConversionWorkflow(dwgUrn) {
  const accessToken = await getAccessToken();
  await convertDWGtoDXF(dwgUrn);
  
  // 轮询任务状态,间隔3秒
  let status = 'inprogress';
  while (status === 'inprogress' || status === 'pending') {
    await new Promise(resolve => setTimeout(resolve, 3000));
    const manifest = await checkConversionStatus(dwgUrn, accessToken);
    status = manifest.status;
    
    if (status === 'success') {
      // 提取DXF文件的下载信息
      const dxfResult = manifest.derivatives.find(item => item.outputType === 'dxf');
      if (dxfResult) {
        console.log('转换完成,DXF文件信息:', dxfResult);
        return dxfResult;
      }
    } else if (status === 'failed') {
      console.error('转换失败:', manifest);
      throw new Error('DWG转DXF任务执行失败');
    }
  }
}

使用前需完成前置步骤:

  1. 在Autodesk开发者平台创建应用,获取合法的CLIENT_ID和CLIENT_SECRET
  2. 将目标DWG文件上传至Autodesk OSS存储,获取对应的URN

内容的提问来源于stack exchange,提问作者Kzuy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 03:18:38