Удалите папки в контейнере хранилища BLOB-объектов Azure

У меня есть контейнер с именем "pictures", и внутри него есть несколько папок с именем "Folder1", "Folder2". Таким образом, файлы моего блоба будут адресованы так: " http://optimus.blob.core.windows.net/pictures/Folder1/IMG123.png". Используя приведенный ниже код C# для удаления файлов внутри папок,

CloudStorageAccount storageAccount = CloudStorageAccount.Parse(*AzureConnectionString*);

CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

CloudBlobContainer container = blobClient.GetContainerReference("pictures");

var blobs = container.ListBlobs("Folder1", true);
foreach (var blob in blobs)
{
  container.GetBlockBlobReference(((CloudBlockBlob)blob).Name).DeleteIfExists();
}

после удаления всех этих файлов в "Папка1" он будет пустым. Я пытаюсь удалить пустую папку, но не могу найти способ сделать это. Можно ли удалить папки? Любая помощь будет высоко ценится. Заранее спасибо.

3 ответа

Решение

В любом контейнере BLOB-объектов нет реальной папки или каталога. Они являются виртуальными каталогами для управления структурой папок для больших двоичных объектов в контейнере, и если все большие двоичные объекты с любым виртуальным каталогом или папкой будут удалены, такой папки не будет. Это все логическое представление структуры папок, и вы можете игнорировать папки в любом контейнере.

Но когда дело доходит до контейнера, вам необходимо вручную удалить контейнер после удаления его больших двоичных объектов, если вы хотите очистить весь контейнер.

Для хранилища BLOB-объектов Azure в действительности нет объекта "папка". "Папки" на самом деле являются просто префиксами имен BLOB-объектов - символ "/", используемый для разделения "папок", является соглашением в именовании BLOB-объектов, а не обязательным требованием. Таким образом, вам не нужно беспокоиться об этом - пока нет блобов с префиксом "Folder1", все в порядке.

Попробуйте использовать клиентскую библиотеку хранилища BLOB-объектов Azure v12 для .NET.

                  BlobBatchClient batch = service.GetBlobBatchClient();
            await batch.DeleteBlobsAsync(new Uri[] { valid.Uri, invalid.Uri });

Пример доступен здесь https://github.com/Azure/azure-sdk-for-net/blob/master/sdk/storage/Azure.Storage.Blobs.Batch/samples/Sample03b_BatchingAsync.cs

Другие вопросы по тегам