代码之家  ›  专栏  ›  技术社区  ›  johnstaveley

从Microsoft.Azure.Storage.Blob迁移到Azure.Storage.Blob-缺少目录概念

  •  0
  • johnstaveley  · 技术社区  · 4 年前

    以下是在不同版本的NuGet软件包之间迁移的重要指南: https://github.com/Azure/azure-sdk-for-net/blob/Azure.Storage.Blobs_12.6.0/sdk/storage/Azure.Storage.Blobs/README.md https://elcamino.cloud/articles/2020-03-30-azure-storage-blobs-net-sdk-v12-upgrade-guide-and-tips.html

    但是,我正在努力迁移代码中的以下概念:

    // Return if a directory exists:
    container.GetDirectoryReference(path).ListBlobs().Any();
    

    其中GetDirectoryReference不被理解,并且似乎没有直接翻译

    此外,CloudBlobDirectory的概念似乎还没有进入Azure.Storage.Blobs,例如。

            private static long GetDirectorySize(CloudBlobDirectory directoryBlob) {
                long size = 0;
    
                foreach (var blobItem in directoryBlob.ListBlobs()) {
                    if (blobItem is BlobClient)
                        size += ((BlobClient) blobItem).GetProperties().Value.ContentLength;
    
                    if (blobItem is CloudBlobDirectory)
                        size += GetDirectorySize((CloudBlobDirectory) blobItem);
                }
    
                return size;
            }
    

    0 回复  |  直到 4 年前
        1
  •  3
  •   NotFound    3 年前

    Azure Blob存储中没有物理目录或文件夹。您有时看到的目录是blob的一部分(例如。 folder1/folder2/file1.txt ).这个 List Blobs requests 允许您在调用中添加前缀和分隔符,Azure Portal和Azure Data Explorer使用它们创建文件夹的可视化。作为示例前缀 folder1/ / 将允许您像打开folder1一样查看内容。

    GetDirectoryReference() 添加前缀。这个 ListBlobs() 发出请求并 Any() 检查是否有任何项目返回。

    对于V12,允许您执行相同操作的命令是 GetBlobsByHierarchy 以及它的异步版本。在您的特定情况下,您只想知道目录a中是否存在任何blob GetBlobs