如何使用C#从Azure容器/ Blob中读取/下载所有文件?

时间:2015-05-06 12:19:44

标签: c# file azure download azure-cloud-services

我是Azure存储的新手。所以,请在帖子中考虑文本/代码。 我有一些文件存储在Azure Storage

示例:

http://my.blob.core.windows.net/2015/4/10/fea1fc9d-d04102015115229.jpg
http://my.blob.core.windows.net/2015/4/10/asdfc9d-d04102015115229.jpg

现在我想使用Container/Blob名称将这些文件下载到特定文件夹。

DownloadFiles.aspx

protected void Callme(string sourceURLPath)
    {
        string thumbDirectoryName = string.Empty;
        string sourcePath = sourceURLPath;
        string targetUrl = string.Empty;

        CloudStorageAccount cloudStorageAccount;
        CloudBlobClient blobClient;
        CloudBlobContainer blobContainer;
        BlobContainerPermissions containerPermissions;
        CloudBlob blob;
        cloudStorageAccount = CloudStorageAccount.Parse("DefaultEndpointsProtocol=http;AccountName=" + ConfigurationManager.AppSettings["AzureStorageAccountName"] + ";AccountKey=" + ConfigurationManager.AppSettings["AzureStorageAccountKey"] + "");
 blobClient = cloudStorageAccount.CreateCloudBlobClient();
  blobContainer = blobClient.GetContainerReference(DateTime.Now.Year.ToString());
  blobContainer.CreateIfNotExist();
 containerPermissions = new BlobContainerPermissions();
  containerPermissions.PublicAccess = BlobContainerPublicAccessType.Blob;
        blobContainer.SetPermissions(containerPermissions);
//need to get files here and download in to specific folder
}

有什么建议吗?

1 个答案:

答案 0 :(得分:4)

你几乎就在那里:)。以下是您需要做的事情:

  • 首先,您必须在容器中列出blob。为此,您可以在容器上使用ListBlobs方法。列出blob时,请确保将prefix作为empty string (string.Empty)useFlatBlobListing作为true传递。这将给出容器中的blob列表。
  • 接下来,您将遍历blob列表,将每个blob转换为CloudBlockBlob,然后在每个blob上调用DownloadToFile方法。

关于您的代码的一些建议:

  • 由于您正在从blob容器中读取文件,因此该容器已经存在。因此,无需尝试在每个请求上创建该容器。换句话说,从代码中删除这一行:

    blobContainer.CreateIfNotExist();

  • 同样,您也不需要以下代码行,因为您所做的只是阅读blob。

    containerPermissions = new BlobContainerPermissions();   containerPermissions.PublicAccess = BlobContainerPublicAccessType.Blob;         blobContainer.SetPermissions(containerPermissions);