获取azure blob存储中的最后一个blob

时间:2013-02-20 14:05:25

标签: c# winforms azure

我需要知道如何在blob存储中检索最后创建的blob。现在我正在使用for循环,但目录中大约有50000个 blockblobs

如何以有效的方式获取最后创建的块blob?

我的代码如下:

string url = null;
foreach (var blobItem in subdir.ListBlobs())
{
    url = blobItem.Uri.ToString();
}
url += signature;
if (url != pictureBoxLiveViewer.ImageLocation)
{
    pictureBoxLiveViewer.ImageLocation = url;
}

这是计时器中的一个功能,每分钟都在滴答声。所以效率低下。

2 个答案:

答案 0 :(得分:3)

Blob存储不支持查询功能,因此您需要自己实现。一个显而易见的选择是您当前正在执行此操作的方式,其中列出blob并找到该列表中的最后一个blob。

[大声思考]

您可以做的一件事是以反向时间顺序命名blob (类似于表格中的PartitionKey)。所以你可以做的就是使用这个逻辑命名你的blob

var blobName = DateTime.MaxValue - DateTime.UtcNow

当你列出blob时,你总是先得到最新的blob。

另一种替代方法是在表存储中保存blob名称,创建日期和blob URI。同样,您可能希望使用与上面相同的逻辑来进行PartitionKey。然后你会查询表存储,从表中获取第一条记录,这将是你最近创建的blob。

答案 1 :(得分:2)

我在我的上传应用程序中创建了一个函数,每次在文本文件(txt)中写入最新图像的完整URI时

CloudBlobClient blobClient = new CloudBlobClient(
    sUrl, new StorageCredentialsSharedAccessSignature(signature));
CloudBlobContainer container = blobClient.GetContainerReference(container1);
CloudBlobDirectory dir = container.GetDirectoryReference(cameranaam);
CloudBlob cloudBlob = dir.GetBlobReference(cameranaam+".txt");
cloudBlob.UploadText(blobSAS.Uri.ToString());

这是我的另一个项目的计时器正在加载服务器的最后一个图像:

blobClient = new CloudBlobClient(
    blobstoreurl, new StorageCredentialsSharedAccessSignature(signature));
container = blobClient.GetContainerReference(containerName);
CloudBlobDirectory dir = 
    container.GetDirectoryReference(comboBoxCameras.SelectedItem.ToString());
CloudBlob cloudBlob = dir.GetBlobReference(
    comboBoxCameras.SelectedItem.ToString().Replace(" ","") + ".txt");
pictureBoxLiveViewer.ImageLocation = cloudBlob.DownloadText() + signature;