20

Microsoft Azure .NET クライアント ライブラリを使用して、Azure クラウド ストレージとやり取りしています。メタデータ コレクション内の各 BLOB に関する追加情報にアクセスできる必要があります。私は現在 CloudBlobDirectory.ListBlobs() メソッドを使用して、ブロブ名で考案したディレクトリ構造の特定のディレクトリにあるブロブのリストを取得しています。ListBlobs() メソッドは IListBlobItem オブジェクトのリストを返します。プロパティは、Url と、親ディレクトリと親コンテナーへの参照の 2 つだけです。実際のブロブ オブジェクトのメタデータを取得する必要があります。

IListBlobItem を BlockBlob オブジェクトにキャストするか、IListBlockItem を使用して BlockBlob への参照を取得する方法があると思いましたが、それを行う方法が見つからないようです。

私の質問は次のとおりです。このメソッドから BlockBlob オブジェクトを取得する方法はありますか、または実際の BlockBlob オブジェクトを取得する別の方法を使用する必要がありますか? 異なる場合は、「ディレクトリ」スキームでフィルタリングしながら、これを達成する方法を提案できますか?

4

3 に答える 3

24

わかりました...これを行う方法を見つけました。少し不格好で間接的なように見えますが、IListBlobItem を CloudBlockBlob オブジェクトに直接キャストするという、私が実行できるはずだと思っていた主なことを実現しています。

私がやっていることは、Directory オブジェクトの ListBlobs() メソッドからリストを取得し、リスト内の各項目をループして項目を CloudBlockBlob オブジェクトにキャストし、FetchAttributes() メソッドを呼び出してプロパティ (メタデータを含む) を取得することです。 . 次に、新しい「情報」オブジェクトを情報オブジェクトの新しいリストに追加します。私が使用しているコードは次のとおりです。

CloudBlobDirectory dir = container.GetDirectoryReference(dirPath);

var blobs = dir.ListBlobs(true);

foreach (IListBlobItem item in blobs)
{
    CloudBlockBlob blob = (CloudBlockBlob)item;
    blob.FetchAttributes();
    files.Add(new ImageInfo
    {
        FileUrl = item.Uri.ToString(),
        FileName = item.Uri.PathAndQuery.Replace(restaurantId.ToString().PadLeft(3, '0') + "/", ""),
        ImageName = blob.Metadata["Name"]
    });
}

「Blob」の概念全体が不必要に複雑に見え、Blob ラッパーの主な機能の 1 つであると私が思っていたことが実現されていないようです。つまり、名前、ディレクトリ、コンテナー、およびメタデータに対するクエリを許可することで、検索機能を拡張する方法です。次のような linq クエリを作成できると思っていました。 「日没」の値を持つカテゴリ」。それを行う方法はないようで、それは私にとって機会を逃したようです. しかたがない。

私が間違っていて、ここから離れている場合は、お知らせください。

于 2013-01-10T22:13:50.427 に答える