gpt4 book ai didi

c# - 天蓝色存储/c# : Download all files from a directory in a container

转载 作者:行者123 更新时间:2023-12-05 07:28:19 25 4
gpt4 key购买 nike

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

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

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

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

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

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

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

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);
}

最佳答案

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

这样试试

var blobContainerName = "users";
var storageCredentials = new StorageCredentials(azureStorageAccountName, azureStorageAccountKey);
var storageAccount = new CloudStorageAccount(storageCredentials, true);
var context = new OperationContext();
var options = new BlobRequestOptions();
var cloudBlobClient = storageAccount.CreateCloudBlobClient();
var cloudBlobContainer = cloudBlobClient.GetContainerReference(blobContainerName);
BlobContinuationToken blobContinuationToken = null;
do
{
var results = await cloudBlobContainer.ListBlobsSegmentedAsync(null, true, BlobListingDetails.All,
null, blobContinuationToken, options, context);
blobContinuationToken = results.ContinuationToken;
foreach (var item in results.Results)
{
if(item is CloudBlockBlob blockBlob)
{
string path = $"{target}{blockBlob.Name}";
blockBlob.DownloadToFile(path, FileMode.OpenOrCreate);
}
}
} while (blobContinuationToken != null);

关于c# - 天蓝色存储/c# : Download all files from a directory in a container,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53451403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com