Удалить старые azure капли - PullRequest
0 голосов
/ 06 мая 2020

Я хочу использовать следующий метод для удаления BLOB-объектов 30-дневной давности. Однако, похоже, что часть «sourceBlob.getProperties (). GetLastModified (). GetTime ();» генерирует исключение. Какие могут быть возможные решения? В сообщении об исключении отображается только null. Тип хранилища Azure - Хранилище (универсальное, v1)

public static void deleteOldBlobs(String source) {
    try {
        System.out.println("deleteOldBlobs started");
        CloudStorageAccount storageAccount = CloudStorageAccount
                .parse(PropertyUtil.getProperty("storageConnectionString"));
        CloudBlobClient blobClient = storageAccount.createCloudBlobClient();
        CloudBlobContainer sourceContainer = blobClient.getContainerReference(source);
        long daysBack = 30;
        System.out.println(daysBack);
        long cutoff = (daysBack * (24 * 60 * 60 * 1000));
        for (ListBlobItem blobItem : sourceContainer.listBlobs()) {
            String sourceFileName = new File(blobItem.getUri().toString()).getName();
            System.out.println(sourceFileName);
            CloudBlockBlob sourceBlob = sourceContainer.getBlockBlobReference(sourceFileName);
            System.out.println(sourceBlob.getProperties().getLastModified().getTime());
            long diff = new Date().getTime()- sourceBlob.getProperties().getLastModified().getTime();

            if (diff > cutoff) {
                sourceBlob.deleteIfExists();
            }
        }
        System.out.println("deleteOldBlobs ended");
    } catch (Exception ex) {
        System.out.println(ex.getMessage());
    } finally {
    }
}

1 Ответ

2 голосов
/ 06 мая 2020

Вам нужно будет вызвать метод downloadAttributes() для заполнения свойств большого двоичного объекта.

Следующая строка кода:

CloudBlockBlob sourceBlob = sourceContainer.getBlockBlobReference(sourceFileName);

просто создание экземпляра CloudBlockBlob со свойствами, установленными со значениями по умолчанию. Когда вы вызываете метод downloadAttributes, будет выполнен сетевой вызов и будут получены атрибуты blob.

Итак, ваш код будет:

CloudBlockBlob sourceBlob = sourceContainer.getBlockBlobReference(sourceFileName);
sourceBlob.downloadAttributes();
System.out.println(sourceBlob.getProperties().getLastModified().getTime());

Учитывая, что вы уже перечислили blob-объекты, вы можете преобразовать свой blobItem как CloudBlob, и тогда вам не нужно будет получать атрибуты (что делает сетевой вызов и сделает весь процесс намного медленнее и подверженным ошибкам).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...