Как получить файлы, измененные сегодня, из хранилища BLOB-объектов Azure - PullRequest
0 голосов
/ 02 ноября 2018

Я хочу получать из хранилища BLOB-объектов Azure файлы, которые изменяются каждый день. У нас в Azure есть контейнер, который ежедневно заполняется двумя файлами Excel, и мне нужно получить эти файлы.

Пока что я могу получить только один файл, используя latestmodifiedon. Как я могу получить оба файла?

private static DataSet GetExcelBlobData()
{
    var containerName = "salesbycontract";
    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(Microsoft.Azure.CloudConfigurationManager.GetSetting("StorageConnectionString"));

    CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
    CloudBlobContainer container = blobClient.GetContainerReference(containerName);
    CloudBlockBlob blockbob = container.ListBlobs().OfType<CloudBlockBlob>().OrderByDescending(m => m.Properties.LastModified).ToList().First();

    var x = blockbob.Name;
    Console.WriteLine(x);

    DataSet ds;
    using (var memstream = new MemoryStream())
    {
        blockbob.DownloadToStream(memstream);

        var excelReader = ExcelReaderFactory.CreateOpenXmlReader(memstream);
        ds = excelReader.AsDataSet();
        excelReader.Close();
    }
    return ds;
}

Ответы [ 2 ]

0 голосов
/ 24 февраля 2019

Перенесено из Фикри Хайлала (ОП) 8 ноября 2018 г. edit , добавившего ответ на свой вопрос:

Ниже приведен запрос, который работает для моего случая:

var blockbob = container.ListBlobs().OfType<CloudBlockBlob>().OrderByDescending(m => m.Properties.LastModified).ToList().Take(2);
0 голосов
/ 02 ноября 2018

Просто добавьте Where предложения и сравните с DateTime.Today:

var blockbob = container.ListBlobs().OfType<CloudBlockBlob>()
    .Where(m => m.Properties.LastModified.Value.Date == DateTime.Today).ToList().First();

Я добавил рабочий пример в мой репозиторий GitHub , в котором используется ядро ​​dotnet с последней версией WindowsAzure.Storage SDK:

public async Task RetrieveBlobsModifiedTodayAsync()
{
    var container = _blobClient.GetContainerReference(_storageAccount.ContainerName);

    BlobContinuationToken blobContinuationToken = null;
    do
    {
        var results = await container.ListBlobsSegmentedAsync(null, blobContinuationToken);

        var blobs = results.Results.OfType<CloudBlockBlob>()
            .Where(b => b.Properties.LastModified != null && b.Properties.LastModified.Value.Date == DateTime.Today);

        blobContinuationToken = results.ContinuationToken;
        foreach (var item in blobs)
        {
            Console.WriteLine(item.Uri);
        }
    } while (blobContinuationToken != null); // Loop while the continuation token is not null. 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...