6

次のコードは、blobファイルサイズ0を返します。

public long GetFileSize(string fileUrl)
{
    var blob = GetBlobContainer().GetBlobReference(fileUrl);
    return blob == null ? 0 : blob.Properties.Length;
}

、ほとんどブロブが見つからないのと同じです。しかし、ブロブを削除すると、ブロブが削除されることがわかります。これは、以下を削除するときに機能します。

void DeleteFileFromBlob(string fileUrl, bool deleteSnapshots)
{
    var blob = GetBlobContainer().GetBlobReference(fileUrl);
    if (deleteSnapshots)
    {
        var options = new BlobRequestOptions { DeleteSnapshotsOption = DeleteSnapshotsOption.IncludeSnapshots };
        blob.DeleteIfExists(options);
    }
    else blob.DeleteIfExists();
}

基本的に上記と同じコードなので、blobが見つかったようです。

ブロブを反復処理すると、ストレージに格納されているバイトの合計量を計算するときと同じように、正しいブロブファイルサイズが取得されます。

public long GetStorageUsageByteSize()
{
    var blobClient = GetBlobClient();
    return (from container in blobClient.ListContainers()
                      select
                      (from CloudBlob blob in
                           container.ListBlobs(new BlobRequestOptions { UseFlatBlobListing = true })
                       select blob.Properties.Length
                      ).Sum()
                     ).Sum();            
}

したがって、URLでGetBlobReferenceを使用すると、CloubdBlob::Properties.Lengthが0を返す理由がわかりません。

4

2 に答える 2

14

BLOBのメタデータをロードするFetchAttributesメソッドの呼び出しが欠落しているようです。

blob.FetchAttributes(); 

参照:https ://azure.microsoft.com/en-us/documentation/articles/storage-properties-metadata/

于 2012-04-26T11:41:51.933 に答える
0

サーバーからRefを取得すると、うまくいくはずです。

await blobContainer.GetBlobReferenceFromServerAsync(blobPath);
于 2019-10-04T01:24:35.407 に答える