【问题标题】:Partial file name Search of Azure blob storage without file extension部分文件名搜索不带文件扩展名的 Azure blob 存储
【发布时间】:2021-04-13 18:44:17
【问题描述】:

我在 Blob 容器中的 azure 上有图像文件。所有文件都有唯一的名称。我需要在没有扩展名的情况下搜索这些图像文件的名称。例如我有文件: 123.PNG 345.jpg 122.JPG

如果我给出文件的完整名称,例如 123.PNG,当前代码可以搜索。 如何让它通过 123 就可以工作。

代码:ID 作为参数传递,它是 blob 中的文件名。:

            var blobClient = storageAccount.CreateCloudBlobClient();
            var container = blobClient.GetContainerReference("images");
            container.CreateIfNotExists();
            var blockBlob = container.GetBlockBlobReference(id);
            blockBlob.FetchAttributes();
            byte[] downloadedImage = new byte[blockBlob.Properties.Length];
            blockBlob.DownloadToByteArray(downloadedImage, 0);
            var imageBase64 = Convert.ToBase64String(downloadedImage);

【问题讨论】:

    标签: c# azure azure-blob-storage


    【解决方案1】:

    您可以做的是使用ListBlobs 方法,该方法接受string prefix 参数,如下所示:

    var blobClient = storageAccount.CreateCloudBlobClient();
    var container = blobClient.GetContainerReference("images");
    container.CreateIfNotExists();
    var blockBlobs = container.ListBlobs(prefix: "123.").OfType<CloudBlockBlob>();
    
    var blockBlob = blockBlobs.First();
    blockBlob.FetchAttributes();
    byte[] downloadedImage = new byte[blockBlob.Properties.Length];
    blockBlob.DownloadToByteArray(downloadedImage, 0);
    var imageBase64 = Convert.ToBase64String(downloadedImage);
    

    以上示例将找到 123.JPG 或 123.PNG(或两者)

    您将获得名称以 prefix 开头的所有 blob 的列表。

    【讨论】:

    • 我收到一个错误 blockBlob.FetchAttributes();因为 blockbob 被创建为没有 fetchattributes() 方法的 IListBlobItem。
    • @PrafulMattoo 查看编辑(添加OfType&lt;CloudBlockBlob&gt;();
    • @PrafulMattoo 很高兴为您提供帮助,欢迎来到 Stack Overflow。如果此答案或任何其他答案解决了您的问题,请将其标记为已接受
    【解决方案2】:

    对于新手,你应该这样使用:

    var pagesize = 10;    
    var resultSegment = blobContainerClient.GetBlobsAsync(prefix: "BlobName")
                .AsPages(default, pagesize);
    
            // Enumerate the blobs returned for each page.
            await foreach (Azure.Page<BlobItem> blobPage in resultSegment)
            {
                foreach (BlobItem blobItem in blobPage.Values)
                {
                    Console.WriteLine("Blob name: {0}", blobItem.Name);
                }
    
                Console.WriteLine();
            }
    

    参考:MSDN(List blobs with Azure Storage client libraries)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-26
      • 2012-05-11
      • 2016-10-23
      • 2017-03-29
      • 2018-08-12
      • 2019-04-04
      • 2013-12-19
      相关资源
      最近更新 更多