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

无法向Autodesk Forge服务器上传文件:Legacy endpoint弃用错误排查

问题描述

我需要将rvt文件转换为ifc文件,采用Autodesk Forge API操作,步骤如下:

  1. 在Autodesk创建应用后,通过以下代码获取token:
const response = await fetch('https://developer.api.autodesk.com/authentication/v2/token', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded',
  },
  body: new URLSearchParams({
    "client_id": "myclientid",
    "client_secret": "myclientscert",
    "grant_type": 'client_credentials',
    "scope": 'bucket:create bucket:read data:write data:read'
  }),
}); 
  1. 通过以下代码创建bucket,且bucket已成功创建:
fetch('https://developer.api.autodesk.com/oss/v2/buckets', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${data.access_token}`,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    bucketKey: bucketKey,
    policyKey: 'persistent'
  })
});
const bucket = await bucketresponse.json();
  1. 但使用以下代码上传rvt文件时,返回403 Forbidden错误,提示"Legacy endpoint is deprecated",Postman中也出现相同错误:
using (FileStream stream = new FileStream("D:\\Tech.rvt", FileMode.Open, FileAccess.Read)) {
  var content = new StreamContent(stream);
  content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
  var request = new HttpRequestMessage(HttpMethod.Put,
    $"https://developer.api.autodesk.com/oss/v2/buckets/{bucket}/objects/{Uri.EscapeDataString(fileName)}");
  request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);
  request.Content = content;
  var response = await httpClient.PutAsync(request);
  var result = await response.Content.ReadAsStringAsync();
}

请协助排查问题原因?

问题排查与解决

错误原因

你使用的OSS文件上传端点属于旧版废弃接口,Forge API已更新文件上传的端点规则,旧的oss/v2/buckets/{bucketKey}/objects/{objectName} PUT请求方式不再被支持,因此返回403错误并提示"Legacy endpoint is deprecated"。

正确的上传流程

Forge OSS的文件上传分两种场景,对应不同的接口调用方式:

1. 小文件直接上传(≤100MB)

改用POST请求调用上传接口,端点保持不变,代码修改示例:

using (FileStream stream = new FileStream("D:\\Tech.rvt", FileMode.Open, FileAccess.Read))
{
    var content = new StreamContent(stream);
    content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
    // 替换PUT为POST方法
    var request = new HttpRequestMessage(HttpMethod.Post,
        $"https://developer.api.autodesk.com/oss/v2/buckets/{bucketKey}/objects/{Uri.EscapeDataString(fileName)}");
    request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);
    request.Content = content;
    var response = await httpClient.SendAsync(request);
    var result = await response.Content.ReadAsStringAsync();
}

2. 大文件分片上传(>100MB)

若文件超过100MB,需分三步完成上传:

  1. 初始化上传会话:
POST https://developer.api.autodesk.com/oss/v2/buckets/{bucketKey}/objects/{objectName}/resumable
  1. 分片上传文件块:
PUT https://developer.api.autodesk.com/oss/v2/buckets/{bucketKey}/objects/{objectName}/resumable?sessionId={sessionId}&range={bytes=start-end}
  1. 完成上传会话:
POST https://developer.api.autodesk.com/oss/v2/buckets/{bucketKey}/objects/{objectName}/resumable?sessionId={sessionId}

额外注意点

  • 确认bucketKey参数正确,代码中{bucket}变量应传入创建bucket时返回的bucketKey字符串,而非整个bucket对象。
  • 你的token获取代码已包含data:write权限,这部分无需调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 04:37:24