无法向Autodesk Forge服务器上传文件:Legacy endpoint弃用错误排查
问题描述
我需要将rvt文件转换为ifc文件,采用Autodesk Forge API操作,步骤如下:
- 在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' }), });
- 通过以下代码创建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();
- 但使用以下代码上传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,需分三步完成上传:
- 初始化上传会话:
POST https://developer.api.autodesk.com/oss/v2/buckets/{bucketKey}/objects/{objectName}/resumable
- 分片上传文件块:
PUT https://developer.api.autodesk.com/oss/v2/buckets/{bucketKey}/objects/{objectName}/resumable?sessionId={sessionId}&range={bytes=start-end}
- 完成上传会话:
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
相关产品推荐
相关产品推荐

