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

求助:基于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功能,仅需借助教程完成认证逻辑并实现文件上传。

下一步推进建议

  1. 确认权限范围
    确保InternalTokenScopes包含文件上传所需的权限,至少需要data:write、data:create、bucket:create(若需创建新存储桶),ACC场景下还需account:read用于访问项目结构。

  2. 实现文件上传核心逻辑
    基于Data Management API分步骤开发:

    • 定位目标文件夹:调用HubsApi、ProjectsApi、FoldersApi,使用InternalToken请求用户的ACC项目结构,确定文件上传的目标文件夹
    • 大文件分块上传:为支持无大小限制,必须采用分块上传流程:
      1. 调用ObjectsApi的CreateSignedResourceAsync创建上传会话
      2. 分块上传文件内容,单块大小建议设为25MB(API最大支持50MB)
      3. 上传完成后调用CompleteSignedResourceAsync确认文件状态
    • 长文件名处理:ACC原生支持长文件名,直接传递原始文件名即可,API会自动处理编码问题
  3. 添加错误处理与重试机制
    针对网络波动、API限流等场景添加重试逻辑;捕获并处理常见错误码(如401令牌过期、403权限不足、413块大小超限等),给出明确提示。

  4. 功能测试验证

    • 测试不同大小的文件(含GB级大文件)上传流程
    • 验证超长文件名(超过255字符)的上传兼容性
    • 确认令牌过期后自动刷新逻辑正常运行
  5. ACC场景适配
    ACC项目结构与普通OSS不同,需确保调用API时使用ACC专属的HUB ID(格式为b.xxxx),上传文件需关联到ACC项目的对应文件夹,而非普通存储桶。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 04:56:02