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

使用PowerShell上传文件至Data Lake Gen2时遇409状态码错误

解决ADLS Gen2上传文件时的409 OperationNotAllowedInCurrentState错误

错误原因

你遇到的409错误是因为上传文件时指定的-Path参数是已存在的目录路径,而非目标文件的完整路径。当尝试将文件上传到一个已存在的目录名位置时,系统会试图创建一个与目录同名的文件,这会引发实体冲突(目录和文件不能同名),从而触发OperationNotAllowedInCurrentState错误。

解决方案

上传文件时,必须将-Path参数设置为完整的目标文件路径(目录路径+文件名),而非仅目录路径。同时可添加逻辑确保目标目录存在,避免因目录缺失导致的其他问题。

修正后的代码

1. 调整调用逻辑,传入正确的文件路径

$DataLakeDetails = @{
    Context    = New-AzStorageContext `
        -UseConnectedAccount `
        -StorageAccountName $(Get-AzName @NameDetails -ResourceType 'dls' -Separator '')
    FileSystem = 'dls'
}

# 源文件路径
$sourceFile = "path/to/your-file.json"
# 提取源文件名
$fileName = [System.IO.Path]::GetFileName($sourceFile)
# 目标文件完整路径(目录+文件名)
$targetFilePath = "some/dir/dir/_delta_log/$fileName"

# 调用上传函数
Add-NewFileAzDataLakeGen2Item @DataLakeDetails -Source $sourceFile -Path $targetFilePath

2. 优化上传函数,自动创建目标目录

function Add-NewFileAzDataLakeGen2Item {
    param (
        $Context,
        $FileSystem,
        $Source,
        $Path
    )
    Try{
        # 提取目标父目录路径
        $targetParentDir = Split-Path $Path -Parent
        # 若父目录不存在,自动创建
        if (-not [string]::IsNullOrEmpty($targetParentDir)) {
            $null = New-AzDataLakeGen2Item -Context $Context -FileSystem $FileSystem -Path $targetParentDir -Directory -Force
        }
        # 执行文件上传
        New-AzDataLakeGen2Item -Context $Context -FileSystem $FileSystem -Path $Path -Source $Source -Force
        return $true
    }
    catch{
        Write-Error $_.Exception.Message
        return $false
    }
}

验证逻辑

  • 确保$targetFilePath包含具体的文件名,而非仅目录名
  • 函数会先检查并创建目标文件的父目录,再执行上传操作
  • 这样就不会出现目录与文件同名的冲突,可正常完成上传

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 20:25:10