Удалите папки в контейнере хранилища 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