Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting the latest file modified from Azure Blob

Tags:

Say I am generating a couple of json files each day in my blob storage. What I want to do is to get the latest file modified in any of my directories. So I'd have something like this in my blob:

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

I want to get 2016/02/03/test.json. So one way is getting the full path of the file and do a regex checking to find the latest directory created, but this doesn't work if I have more than one josn file in each dir. Is there anything like File.GetLastWriteTime to get the latest modified file? I am using these codes to get all the files 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<IListBlobItem> GetBlobItems(CloudBlobContainer container) {     IEnumerable<IListBlobItem> items = container.ListBlobs(useFlatBlobListing: true);     return items; }  public static List<string> GetAllBlobFiles(IEnumerable<IListBlobItem> blobs) {     var listOfFileNames = new List<string>();      foreach (var blob in blobs)     {         var blobFileName = blob.Uri.Segments.Last();         listOfFileNames.Add(blobFileName);     }     return listOfFileNames; } 
like image 575
Yar Avatar asked Mar 28 '16 16:03

Yar


People also ask

Would it be possible to modify an existing blob snapshot?

After you create a snapshot, you can read, copy, or delete it, but you cannot modify it.

How do I know if my azure Blob storage upload was successful?

Is there any way to check the status of a blob upload? If no exception throws from your code, it means the blob has been uploaded successfully.


1 Answers

Each IListBlobItem is going to be a CloudBlockBlob, a CloudPageBlob, or a CloudBlobDirectory.

After casting to block or page blob, or their shared base class CloudBlob (preferably by using the as keyword and checking for null), you can access the modified date via blockBlob.Properties.LastModified.

Note that your implementation will do an O(n) scan over all blobs in the container, which can take a while if there are hundreds of thousands of files. There's currently no way of doing a more efficient query of blob storage though, (unless you abuse the file naming and encode the date in such a way that newer dates alphabetically come first). Realistically if you need better query performance I'd recommend keeping a database table handy that represents all the file listings as rows, with things like an indexed DateModified column to search by and a column with the blob path for easy access to the file.

like image 161
Mike Asdf Avatar answered Oct 26 '22 18:10

Mike Asdf