如何检查azure块blob中是否有数据

时间:2015-06-18 15:57:13

标签: azure azure-storage-blobs

我正在尝试找一种更优雅的方法来检查我创建的blob存储中是否有任何内容。

我有一个从blob存储读取的服务。我基本上需要确保当我的服务重新启动时,它会检查blob中是否有任何内容可以在正常运行之前进行读取和处理。

我似乎无法找到检查阻塞是否为空的方法。我提出了一种方法来做到这一点,但我想知道是否有一种更优雅的方式:

这是我的解决方案,只需检查您是否能够下载任何内容。当然有效..

public bool IsBlobEmpty()
{
    string text;
    using (var memoryStream = new MemoryStream())
    {
        blockBlob.DownloadToStream(memoryStream);
        text = System.Text.Encoding.UTF8.GetString(memoryStream.ToArray());
        if (text.Length > 0)
        {
            return false;
        }
    }
    return true;
}

2 个答案:

答案 0 :(得分:2)

您可以使用Azure存储Blob API获取blob的元数据信息并检查其大小 - https://msdn.microsoft.com/en-us/library/azure/dd179394.aspx

服务器的响应头包含Content-Length属性

x-ms-meta-Name: myblob.txt
x-ms-meta-DateUploaded: Sun, 23 Oct 2013 18:45:18 GMT
x-ms-blob-type: BlockBlob
x-ms-lease-status: unlocked
x-ms-lease-state: available
Content-Length: 11
Content-Type: text/plain; charset=UTF-8
Date: Sun, 23 Oct 2013 19:49:38 GMT
ETag: "0x8CAE97120C1FF22"
Accept-Ranges: bytes
x-ms-version: 2013-08-15
Last-Modified: Wed, 23 Oct 2013 19:49
Server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.

答案 1 :(得分:0)

您想检查容器内部。以下代码返回给定容器内blob的名称。你可以调整你想要的方式。

private readonly CloudBlobClient _blobClient;

public List<string> GetBlockBlobNames(string containerName, 
   string prefix = null)
{
    var names = new List<string>();

    var container = _blobClient.GetContainerReference(containerName.ToLower());

    if (container.Exists())
    {
        IEnumerable<IListBlobItem> collection = container.ListBlobs(prefix, true);

        // Loop over items within the container and output the length and URI.
        foreach (IListBlobItem item in collection)
        {
            if (item is CloudBlockBlob)
            {
                var blob = (CloudBlockBlob) item;

                names.Add(blob.Name);
            }
            else if (item is CloudPageBlob)
            {
                var pageBlob = (CloudPageBlob) item;
                names.Add(pageBlob.Name);
            }
            else if (item is CloudBlobDirectory)
            {
                var directory = (CloudBlobDirectory) item;
            }
        }
    }

    return names;
}