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

调用UploadFilePart遇155异常,求PowerShell上传Vault文件解决办法

Autodesk Vault 上传文件「155」异常解决

我在将本地文件检入Autodesk Vault时,需获取上传凭证(upload ticket),但运行以下PowerShell代码时触发「155」异常,求协助修复:

function Upload-FileResource {
    param (
        [Object] $vault,
        [string] $filename,
        [byte[]] $fileContents
    )
    
    $headerObject = New-Object Autodesk.Connectivity.WebServices.FileTransferHeader
    $headerObject.Identity = New-Guid
    $headerObject.Extension = [System.IO.Path]::GetExtension($filename)
    $headerObject.Vault = $vault.WebServiceCredentials.VaultName
    $uploadTicket = New-Object Autodesk.Connectivity.WebServices.ByteArray
    $bytesTotal = if ($null -ne $fileContents) { $fileContents.Length } else { 0 }
    $bytesTransferred = 0
    do {
        $bufferSize = $bytesTotal - $bytesTransferred
        if ($bufferSize -gt (49 * 1024 * 1024)) {
            $bufferSize = (49 * 1024 * 1024)
        }
 
        $buffer = $fileContents[$bytesTransferred..($bytesTransferred + $bufferSize - 1)]
        $headerObject.Compression = "None" 
        $headerObject.IsComplete = ($bytesTransferred + $bufferSize) -eq $bytesTotal
        $headerObject.UncompressedSize = $bufferSize
        $fileContentsStream = [System.IO.MemoryStream]::new($buffer)
        $uploadTicket.Bytes = $vault.FilestoreService.UploadFilePart($fileContentsStream)
        $bytesTransferred += $bufferSize
    } 
    while ($bytesTransferred -lt $bytesTotal)
    return $uploadTicket
}

$fileContents = [System.IO.File]::ReadAllBytes($localPath)
$uploadTicket = Upload-FileResource -vault $vault -filename $fileName -fileContents $fileContents

问题分析与修正

Vault的「155」异常通常与上传上下文不完整、分块逻辑错误或API调用参数缺失有关,原代码存在以下问题:

  1. 未传递FileTransferHeader到UploadFilePart
    创建的$headerObject未作为参数传入UploadFilePart,Vault无法识别上传的上下文信息,这是触发155错误的核心原因。

  2. 上传凭证字节覆盖而非累加
    每次分块上传返回的ticket字节直接覆盖$uploadTicket.Bytes,导致最终凭证不完整。

  3. 数组切片边界越界
    PowerShell中数组切片$fileContents[$bytesTransferred..($bytesTransferred + $bufferSize - 1)]在最后一块时可能超出数组长度,引发错误。

  4. 未释放MemoryStream资源
    创建的MemoryStream未调用Dispose(),存在资源泄漏风险。

修正后的代码

function Upload-FileResource {
    param (
        [Object] $vault,
        [string] $filename,
        [byte[]] $fileContents
    )
    
    $headerObject = New-Object Autodesk.Connectivity.WebServices.FileTransferHeader
    $headerObject.Identity = New-Guid
    $headerObject.Extension = [System.IO.Path]::GetExtension($filename)
    $headerObject.Vault = $vault.WebServiceCredentials.VaultName
    $uploadTicketBytes = @()
    $bytesTotal = if ($null -ne $fileContents) { $fileContents.Length } else { 0 }
    $bytesTransferred = 0

    do {
        $bufferSize = $bytesTotal - $bytesTransferred
        if ($bufferSize -gt (49 * 1024 * 1024)) {
            $bufferSize = 49 * 1024 * 1024
        }

        # 处理数组切片边界,避免越界
        $endIndex = [Math]::Min($bytesTransferred + $bufferSize - 1, $bytesTotal - 1)
        $buffer = $fileContents[$bytesTransferred..$endIndex]
        
        $headerObject.Compression = "None"
        $headerObject.IsComplete = ($bytesTransferred + $bufferSize) -ge $bytesTotal
        $headerObject.UncompressedSize = $buffer.Length

        # 使用using块自动释放MemoryStream
        using ($fileContentsStream = [System.IO.MemoryStream]::new($buffer)) {
            # 传入headerObject到UploadFilePart
            $partTicket = $vault.FilestoreService.UploadFilePart($fileContentsStream, $headerObject)
            $uploadTicketBytes += $partTicket.Bytes
        }

        $bytesTransferred += $buffer.Length
    } while ($bytesTransferred -lt $bytesTotal)

    $uploadTicket = New-Object Autodesk.Connectivity.WebServices.ByteArray
    $uploadTicket.Bytes = $uploadTicketBytes
    return $uploadTicket
}

$fileContents = [System.IO.File]::ReadAllBytes($localPath)
$uploadTicket = Upload-FileResource -vault $vault -filename $fileName -fileContents $fileContents

额外排查步骤

  • 确认Vault服务端版本与客户端API版本完全匹配,版本不一致易引发此类异常
  • 检查本地文件路径权限,确保执行脚本的账号有文件读取权限
  • 验证$vault会话是否有效,确认FilestoreService已正确初始化
  • 先尝试上传小文件(小于49MB),排除分块逻辑之外的问题

内容的提问来源于stack exchange,提问作者Mr.Sha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 14:26:15