azure storage / c#:从容器中的目录下载所有文件

时间:2018-11-23 18:19:58

标签: c# azure-storage azure-storage-blobs

是否有一种简单的方法可以从容器内部下载所有文件并维护目录结构?

例如,我已将以下目录上载到容器“用户”中的Azure存储帐户。

../用户名/文件/ ../用户名/文件/default.htm ../username/files/1.txt ../ username / files / 2.txt

下面的代码会将d​​efault.htm文件下载到C:\ users \ username \ files \ default.htm

问题是我不想下载特定文件。我希望能够获取users / username /中的每个文件,并在所需的本地存储路径下输出相同的目录结构。

我将在此容器内(不同的用户)有多个“目录”,它们的结构将不总是相同的,有些可能包含多个带有文件的子目录,有些可能没有,等等。所以我真的在寻找一种表达方式:

从“用户/用户名”下载所有文件到C:\ users \ username \

private static void DownloadFromAzureStorage()// RUN on new server
{
    string azureStorageAccountName = 
    ConfigurationManager.AppSettings["AzureStorageAccountName"];
    string azureStorageAccountKey = 
    ConfigurationManager.AppSettings["AzureStorageAccountKey"];
    string target = 
    ConfigurationManager.AppSettings["TargetDirectoryPath"];
    //C:\username\files\
    var storageCredentials = new 
    StorageCredentials(azureStorageAccountName, azureStorageAccountKey);
    var csa = new CloudStorageAccount(storageCredentials, true);

    CloudBlobClient blobClient = csa.CreateCloudBlobClient();
    CloudBlobContainer container = 
    blobClient.GetContainerReference("users");

    CloudBlockBlob blockBlob = 
    container.GetBlockBlobReference("username/files/default.htm");
    string path = (target + "default.htm");
    blockBlob.DownloadToFile(path, FileMode.OpenOrCreate);
}

2 个答案:

答案 0 :(得分:0)

blob名称包括容器中文件的完整路径,因此,如果使用CloudBlockBlob Name属性保存blob,则将获得与容器中相同的文件夹结构。

尝试一下

ChatService

答案 1 :(得分:0)

您可能要尝试使用AzCopy命令行工具,该工具可以递归下载容器/目录:

AzCopy /Source:https://myaccount.blob.core.windows.net/users /Dest:C:\users /SourceKey:key /S