求助:基于APS开发无限制本地文件上传至ACC的应用
问题描述
需要开发一款应用,支持无大小及文件名长度限制地上传本地文件至Autodesk Construction Cloud (ACC)。该应用此前已有开发但无文档与源码,需在1个月内完成开发。
已完成工作
- 与Autodesk开发人员召开两次会议,确认使用Data Management API,参考Simple Viewer和Hubs Browser教程
- 复制Hubs Browser的应用配置与3-legged认证部分,以及Simple Viewer的数据管理模块
- 修改APS.Auth代码,移除公钥相关逻辑,当前代码如下:
using System; using System.Threading.Tasks; using Autodesk.Forge; public partial class APS { public string GetAuthorizationURL() { return new ThreeLeggedApi().Authorize(_clientId, "code", _callbackUri, InternalTokenScopes); } public async Task<Tokens> GenerateTokens(string code) { dynamic internalAuth = await new ThreeLeggedApi().GettokenAsync(_clientId, _clientSecret, "authorization_code", code, _callbackUri); //dynamic publicAuth = await new ThreeLeggedApi().RefreshtokenAsync(_clientId, _clientSecret, "refresh_token", internalAuth.refresh_token, PublicTokenScopes); return new Tokens { //PublicToken = publicAuth.access_token, InternalToken = internalAuth.access_token, RefreshToken = internalAuth.refresh_token, // MUDEI ESSA LINHA DE PUBLIC AUTH PARA INTERNAL AUTH ExpiresAt = DateTime.Now.ToUniversalTime().AddSeconds(internalAuth.expires_in) }; } public async Task<Tokens> RefreshTokens(Tokens tokens) { dynamic internalAuth = await new ThreeLeggedApi().RefreshtokenAsync(_clientId, _clientSecret, "refresh_token", tokens.RefreshToken, InternalTokenScopes); //dynamic publicAuth = await new ThreeLeggedApi().RefreshtokenAsync(_clientId, _clientSecret, "refresh_token", internalAuth.refresh_token, PublicTokenScopes); return new Tokens { //PublicToken = publicAuth.access_token, InternalToken = internalAuth.access_token, RefreshToken = internalAuth.refresh_token, // MUDEI ESSA LINHA DE PUBLIC AUTH PARA INTERNAL AUTH ExpiresAt = DateTime.Now.ToUniversalTime().AddSeconds(internalAuth.expires_in) }; } public async Task<dynamic> GetUserProfile(Tokens tokens) { var api = new UserProfileApi(); api.Configuration.AccessToken = tokens.InternalToken; dynamic profile = await api.GetUserProfileAsync(); return profile; } }
求助需求
本人几乎没有APS相关经验,不清楚下一步推进方向,希望得到Autodesk相关人员的帮助。另外,无需实现Viewer功能,仅需借助教程完成认证逻辑并实现文件上传。
下一步推进建议
确认权限范围
确保InternalTokenScopes包含文件上传所需的权限,至少需要data:write、data:create、bucket:create(若需创建新存储桶),ACC场景下还需account:read用于访问项目结构。实现文件上传核心逻辑
基于Data Management API分步骤开发:- 定位目标文件夹:调用HubsApi、ProjectsApi、FoldersApi,使用
InternalToken请求用户的ACC项目结构,确定文件上传的目标文件夹 - 大文件分块上传:为支持无大小限制,必须采用分块上传流程:
- 调用ObjectsApi的
CreateSignedResourceAsync创建上传会话 - 分块上传文件内容,单块大小建议设为25MB(API最大支持50MB)
- 上传完成后调用
CompleteSignedResourceAsync确认文件状态
- 调用ObjectsApi的
- 长文件名处理:ACC原生支持长文件名,直接传递原始文件名即可,API会自动处理编码问题
- 定位目标文件夹:调用HubsApi、ProjectsApi、FoldersApi,使用
添加错误处理与重试机制
针对网络波动、API限流等场景添加重试逻辑;捕获并处理常见错误码(如401令牌过期、403权限不足、413块大小超限等),给出明确提示。功能测试验证
- 测试不同大小的文件(含GB级大文件)上传流程
- 验证超长文件名(超过255字符)的上传兼容性
- 确认令牌过期后自动刷新逻辑正常运行
ACC场景适配
ACC项目结构与普通OSS不同,需确保调用API时使用ACC专属的HUB ID(格式为b.xxxx),上传文件需关联到ACC项目的对应文件夹,而非普通存储桶。
内容的提问来源于stack exchange,提问作者Pedro Paulo
相关产品推荐
相关产品推荐

