从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
- 使用AAD对Azure API App进行身份validation时出现401错误
- Azure Service Bus无法接收JSON正文
- ConnectionString属性尚未在update-database上初始化
- 生产中的Azure SDK 2.2:无法加载文件或程序集“msshrtmi”或其依赖项之一。 该系统找不到指定的文件
- 从VS C#创建Azure SQL数据库时设置服务层
- 我们如何跟踪azure文件存储文件夹是否更新?
- 无法将REST API用于Windows Server 1.1的Service Bus(OnPremises)
- Azure Notification Hubs包是否与.NET Core兼容?
- 将Azure ServiceBus上的消息从.NET Core发送器发送到.NET 4.6处理程序