从Azure Blob获取最新文件

假设我每天在blob存储中生成几个json文件。 我想要做的是在我的任何目录中修改最新的文件。 所以我的blob中有这样的东西:

 2016/01/02/test.json 2016/01/02/test2.json 2016/02/03/test.json 

我想得到2016/02/03/test.json 。 因此,一种方法是获取文件的完整路径并进行正则表达式检查以查找创建的最新目录,但如果我在每个目录中有多个josn文件,则这不起作用。 是否有类似File.GetLastWriteTime来获取最新的修改文件? 我正在使用这些代码获取所有文件btw:

 public static CloudBlobContainer GetBlobContainer(string accountName, string accountKey, string containerName) { CloudStorageAccount storageAccount = new CloudStorageAccount(new StorageCredentials(accountName, accountKey), true); // blob client CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); // container CloudBlobContainer blobContainer = blobClient.GetContainerReference(containerName); return blobContainer; } public static IEnumerable GetBlobItems(CloudBlobContainer container) { IEnumerable items = container.ListBlobs(useFlatBlobListing: true); return items; } public static List GetAllBlobFiles(IEnumerable blobs) { var listOfFileNames = new List(); foreach (var blob in blobs) { var blobFileName = blob.Uri.Segments.Last(); listOfFileNames.Add(blobFileName); } return listOfFileNames; } 

每个IListBlobItem都将是CloudBlockBlob,CloudPageBlob或CloudBlobDirectory。

在转换为阻止或页面blob或其共享基类CloudBlob (最好使用as关键字并检查null)之后,您可以通过blockBlob.Properties.LastModified访问修改日期。

请注意,您的实现将对容器中的所有blob执行O(n)扫描,如果有数十万个文件,则可能需要一段时间。 目前还没有办法对blob存储进行更有效的查询,(除非你滥用文件命名并对日期进行编码,使得新的日期按字母顺序排在第一位)。 实际上,如果您需要更好的查询性能,我建议保留一个方便的数据库表,将所有文件列表表示为行,其中包括要搜索的索引DateModified列和带有blob路径的列,以便于访问该文件。

像Yar所说,您可以使用单个blob对象的LastModified属性。 这是一个代码片段,一旦您引用了正确的容器,就会显示如何执行此操作:

 var latestBlob = container.ListBlobs() .OfType() .OrderByDescending(m => m.Properties.LastModified) .ToList() .First(); 

注意:blob类型可能不是 。 如有必要,请务必更改。

使用Azure Web Jobs SDK 。 SDK具有监视新/更新的BLOB的选项。

如果出现问题,请使用blockBlob.Container.Properties.LastModified