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

APS/Forge临时S3上传URL过期求助:突破60分钟限制

解决Autodesk Platform Services中Design Automation输出URL过期问题(处理时长超60分钟)

问题背景

在Autodesk Platform Services(原Forge)运行Design Automation应用时,部分文件处理耗时超过60分钟,导致提前生成的S3上传URL在结果产出后过期,最终上传失败。已经将S3UploadURL的minutesExpiration设为最大值60,但仍无法满足需求。由于必须预先把输出URL传入workItem,没法通过后续重新获取URL的方式规避过期问题。

原代码片段:

//POST Get temporary Upload URL
var objectsApiInstance3 = new ObjectsApi();
Dictionary<string, object> opts = new Dictionary<string, object>();
opts.Add("minutesExpiration", 60);
var uploadCsvResponse = objectsApiInstance3.getS3UploadURLAsync(urnOutputBucket, urnOutputObjectKey, opts);
dynamic uploadCsv = JsonConvert.DeserializeObject<Dictionary<string, object>>(uploadCsvResponse.Result.ToString());
string uploadUrl = "";
string outputUploadKey = "";
foreach (var e in uploadCsv)
{
    if (e.Key == "urls")
    {
        uploadUrl = e.Value[0];
    }
    if (e.Key == "uploadKey")
    {
        outputUploadKey = e.Value;
    }
}

//POST Create workItem
var service = new ForgeService(new HttpClient(new ForgeHandler(Microsoft.Extensions.Options.Options.Create(new ForgeConfiguration()
{ ClientId = clientID, ClientSecret = clientSecret }))
{ InnerHandler = new HttpClientHandler() }));
var workItemsApiInstance = new WorkItemsApi(service);
var workItem = new WorkItem()
{
    ActivityId = clientID + "." + activity + "+" + alias,
    Arguments = new Dictionary<string, IArgument>()
    {
        {
            "rvtFile",
            new XrefTreeArgument()
            {
                PathInZip = fileNames[n],
                Url = downloadUrl
            }
        }, {
            "exportChangesSettings",
            new XrefTreeArgument()
            {
                Url = urlDownloadExportChangesSettings
            }
        }, {
            "Result",
            new XrefTreeArgument()
            {
                LocalName = outputFileName,
                Verb = Verb.Put,
                Url = uploadUrl
            }
        }
    }
};
var workItemResult = await workItemsApiInstance.CreateWorkItemAsync(workItem);
var workItemStatus = await api.GetWorkitemStatusAsync(workItemResult.Content.Id);

核心解决方案:直接用APS OSS桶信息作为输出参数

Design Automation支持直接将结果写入你的APS OSS桶,不需要提前生成临时上传URL,从根源上解决过期问题。具体操作如下:

1. 修改WorkItem输出参数配置

把原本传入临时uploadUrl的XrefTreeArgument替换成OSSArgument,直接指定目标桶的BucketKey和对象ObjectKey。这样Design Automation会自动完成授权并写入结果,完全绕开临时URL的过期限制。

2. 修改后的代码示例

//POST Create workItem
var service = new ForgeService(new HttpClient(new ForgeHandler(Microsoft.Extensions.Options.Options.Create(new ForgeConfiguration()
{ ClientId = clientID, ClientSecret = clientSecret }))
{ InnerHandler = new HttpClientHandler() }));
var workItemsApiInstance = new WorkItemsApi(service);
var workItem = new WorkItem()
{
    ActivityId = clientID + "." + activity + "+" + alias,
    Arguments = new Dictionary<string, IArgument>()
    {
        {
            "rvtFile",
            new XrefTreeArgument()
            {
                PathInZip = fileNames[n],
                Url = downloadUrl
            }
        }, {
            "exportChangesSettings",
            new XrefTreeArgument()
            {
                Url = urlDownloadExportChangesSettings
            }
        }, {
            "Result",
            // 直接指定OSS桶和对象键,替代临时上传URL
            new OSSArgument()
            {
                BucketKey = urnOutputBucket,
                ObjectKey = urnOutputObjectKey,
                Verb = Verb.Put
            }
        }
    }
};
var workItemResult = await workItemsApiInstance.CreateWorkItemAsync(workItem);
var workItemStatus = await api.GetWorkitemStatusAsync(workItemResult.Content.Id);

3. 关键注意点

  • 确保你的APS应用拥有目标桶的写入权限,否则Design Automation无法完成结果写入。
  • 不需要再调用getS3UploadURLAsync接口生成临时URL,减少一次API调用。
  • 这种方式不受60分钟限制,不管处理时长多久,任务完成后都会直接写入OSS桶。

备选方案:用Callback触发后续上传(适合非APS存储场景)

如果必须使用外部存储(不是APS OSS),可以通过Callback机制在任务完成后再处理上传:

  • 创建workItem时指定CallbackUrl,任务完成后APS会向该URL发送包含结果文件信息的请求。
  • 收到Callback后,生成新的有效上传URL,把结果文件从APS临时存储中转到你的目标存储。

这个方案需要额外搭建Callback服务,适合无法使用APS OSS的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 12:31:04