繁体   English   中英

在给定 SAS url 的 ADLS2 Azure Datalake 目录中迭代文件

[英]Iterate the files in an ADLS2 Azure Datalake Directory given a SAS url

我想从 ADLS2 存储 blob 目录下载文件 - 我只有一个 SAS url 到所述目录,我想递归下载该目录中的所有文件。

很清楚如何在给定存储凭据的情况下执行此操作,并且有很多示例说明如何执行此操作 - 但我找不到任何使用 SAS url 的示例。

任何线索或文档链接将不胜感激!

我在我的环境中进行了重现,得到了如下预期结果,并且我从@ROGER ZANDER 的博客中获取了代码:

function DownloadBlob {
    param (
        [Parameter(Mandatory)]
        [string]$URL,
        [string]$Path = (Get-Location)
    )
    
    $uri = $URL.split('?')[0]
    $sas = $URL.split('?')[1]
    $newurl = $uri + "?restype=container&comp=list&" + $sas 
    $body = Invoke-RestMethod -uri $newurl 
    $xml = [xml]$body.Substring($body.IndexOf('<')) 
    $files = $xml.ChildNodes.Blobs.Blob.Name
    $files | ForEach-Object { $_; New-Item (Join-Path $Path (Split-Path $_)) -ItemType Directory -ea SilentlyContinue | Out-Null
        (New-Object System.Net.WebClient).DownloadFile($uri + "/" + $_ + "?" + $sas, (Join-Path $Path $_))
     }
}

然后调用 DownloadBlob 函数并提供 SAS URL。

输出:

在此处输入图像描述

在本地机器下载的文件中:

在此处输入图像描述

使用: https ://learn.microsoft.com/en-us/dotnet/api/azure.storage.files.datalake.datalakefileclient?view=azure-dotnet

我不知道它是否存在从 blob 存储下载目录的方法。 但是可以创建一个下载文件夹,循环下载目录下的所有文件。 这是几个步骤:

使用“Datalakeserviceclient”创建服务客户端以使用 SAS 访问 datalake 使用: DataLakeFileClient(Uri, AzureSasCredential)创建客户端。

然后访问容器使用:DataLakeFileSystemClient

fileSystem = CreateFileSystem(client, _containerName)

使用DataLakeDirectoryClient directoryClient = fileSystem.GetDirectoryClient(directoryName); 获取目录

要遍历目录中的项目,请使用以下循环:

foreach (PathItem pathItem in directoryClient.GetPaths())
        {
            int pos = pathItem.Name.LastIndexOf("/") + 1;
            DataLakeFileClient fileClient = directoryClient.GetFileClient(pathItem.Name.Substring(pos, pathItem.Name.Length - pos));

            await fileClient.ReadToAsync(downloadpath + @"\" + pathItem.Name);

        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM