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

使用Forge Design Automation API时无法打开Zip文件的权限问题求助

解决Forge Design Automation API Zip文件权限访问问题

问题核心原因

你在Activity的inputZip参数中设置了"zip": true,Forge Design Automation服务会自动将指定URL的Zip文件下载并解压到工作目录,不会保留原始的test.zip文件。你的代码尝试打开不存在的.\test.zip文件,因此触发了权限拒绝错误(本质是文件不存在导致的路径访问异常)。


解决方案1:利用DA自动解压(推荐)

保持Activity参数的"zip": true配置,DA会自动将Zip内的文件解压到工作目录,无需手动处理解压流程,直接访问解压后的文件即可:

string currentDir = Environment.CurrentDirectory;
string familyFullPath = null;

// 遍历工作目录查找.rfa族文件
foreach (string file in Directory.GetFiles(currentDir, "*.rfa", SearchOption.AllDirectories))
{
    familyFullPath = file;
    Console.WriteLine("找到族文件:" + familyFullPath);
    break; // 按需调整,比如取第一个匹配的文件
}

// 加载族文件
if (!string.IsNullOrEmpty(familyFullPath))
{
    using (var document = new Autodesk.Revit.DB.Document())
    {
        if (document.LoadFamily(familyFullPath, out Family family))
        {
            Console.WriteLine("成功加载族:" + family.Name);
        }
        else
        {
            Console.WriteLine("加载族失败");
        }
    }
}

解决方案2:手动处理Zip文件

如果你需要自己控制解压流程,修改Activity参数去掉"zip": true,让DA直接下载原始Zip文件,然后用绝对路径访问并解压:

步骤1:修改Activity参数

"inputZip": {
    "verb": "get",
    "description": "input file",
    "localName": "test.zip",
    "ondemand": false,
    "required": false
    // 移除"zip": true配置
}

步骤2:修改代码逻辑

string destinationPath = null;
string currentDir = Environment.CurrentDirectory;
// 使用绝对路径访问Zip文件,避免相对路径出错
string zipFilePath = Path.Combine(currentDir, "test.zip");

// 先检查Zip文件是否存在
if (!File.Exists(zipFilePath))
{
    Console.WriteLine("未找到Zip文件:" + zipFilePath);
    return;
}

using (ZipArchive zip = ZipFile.Open(zipFilePath, ZipArchiveMode.Read))
{
    foreach (ZipArchiveEntry entry in zip.Entries)
    {
        // 跳过目录项
        if (string.IsNullOrEmpty(entry.Name)) continue;

        if (entry.FullName.EndsWith(".rfa", StringComparison.OrdinalIgnoreCase))
        {
            string targetPath = Path.Combine(currentDir, entry.FullName);
            // 确保目标目录存在
            Directory.CreateDirectory(Path.GetDirectoryName(targetPath));
            // 提取文件(允许覆盖已存在文件)
            entry.ExtractToFile(targetPath, overwrite: true);
            
            destinationPath = targetPath;
            Console.WriteLine("已提取文件:" + destinationPath);
        }
    }
}

// 加载族文件
if (!string.IsNullOrEmpty(destinationPath))
{
    using (var document = new Autodesk.Revit.DB.Document())
    {
        if (document.LoadFamily(destinationPath, out Family family))
        {
            Console.WriteLine("成功加载族:" + family.Name);
        }
        else
        {
            Console.WriteLine("加载族失败");
        }
    }
}

关键注意事项

  • 所有文件操作必须在DA的工作目录(Environment.CurrentDirectory)下进行,禁止访问系统其他路径,否则会触发权限错误。
  • 手动解压时,务必先创建目标文件的父目录,避免因目录不存在导致解压失败。
  • 确保WebSocket参数中的Zip文件URL可被DA服务访问(如使用带签名的临时URL或公开可访问的URL)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 00:46:07