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

Azure Files:如何识别正在上传的文件?仅列出已完成上传文件方案

解决Azure Files仅列出已完成上传文件的问题

方法1:通过租约(Lease)检测文件状态

由于无法控制上传端,可通过尝试获取文件的排他租约来判断是否完成上传:

  • 文件上传过程中,上传进程会持有写入锁,此时获取租约会失败;
  • 若租约获取成功,说明文件已无写入操作,上传完成。

示例PowerShell代码:

$storageAccountName = "你的存储账户名"
$storageAccountKey = "你的存储账户密钥"
$shareName = "你的文件共享名"

$context = New-AzStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $storageAccountKey
$files = Get-AzStorageFile -ShareName $shareName -Context $context | Where-Object { !$_.IsDirectory }

foreach ($file in $files) {
    try {
        # 尝试获取15秒排他租约,成功则文件已上传完成
        $lease = $file.CloudFile.AcquireLease(15, $null)
        Write-Host "已完成上传: $($file.Name)"
        # 释放租约,不影响后续操作
        $file.CloudFile.ReleaseLease($lease)
    }
    catch {
        # 获取租约失败,说明文件正在上传中
        Write-Host "上传中: $($file.Name)"
    }
}

方法2:检查文件的ContentMD5属性

如果上传工具(如AzCopy、Azure Storage Explorer)默认生成文件MD5哈希,可通过ContentMD5属性判断:

  • 上传过程中该属性为空;
  • 上传完成后,Azure会自动计算并填充该属性(需上传端支持)。

示例PowerShell代码:

$storageAccountName = "你的存储账户名"
$storageAccountKey = "你的存储账户密钥"
$shareName = "你的文件共享名"

$context = New-AzStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $storageAccountKey
$completedFiles = Get-AzStorageFile -ShareName $shareName -Context $context | Where-Object { 
    !$_.IsDirectory -and $_.CloudFile.Properties.ContentMD5 -ne $null 
}

Write-Host "已完成上传的文件列表:"
$completedFiles | Select-Object Name, Length

方法3:利用存储日志筛选完成事件

启用存储账户的存储分析日志,通过记录的操作事件筛选已完成上传的文件:

  1. 进入Azure门户,找到目标存储账户,在「监控」>「日志」中启用文件服务日志记录;
  2. 日志会记录文件上传完成的PutFile或AppendFile完成事件;
  3. 通过Azure Monitor Logs或存储容器中的日志文件,筛选出已完成上传的文件路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 02:13:14