簡體   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