作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有没有一种简单的方法可以从容器内部下载所有文件并维护目录结构?
例如,我已将以下目录上传到容器“用户”中的 Azure 存储帐户。
../用户名/文件/../用户名/文件/default.htm../用户名/文件/1.txt../用户名/文件/2.txt
下面的代码会将default.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/
我是一名优秀的程序员,十分优秀!