删除 Azure Blob 存储容器内的文件夹

Delete folder(s) inside Azure Blob storage container

我有一个名为 "pictures" 的容器,还有一些名为 "Folder1"、"Folder2"[=20 的文件夹=] 在里面。所以我的 blob 文件将像这样处理 "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();
}

删除"Folder1"中的所有文件后,它将是空的。我正在尝试删除空文件夹,但无法执行此操作。是否可以删除文件夹?任何帮助都感激不尽。提前致谢。

对于 Azure Blob 存储,实际上并没有 'folder' 对象。 'Folders' 实际上只是 blob 名称前缀 - 用于分隔 'folders' 的“/”字符是 blob 命名中的约定,不是必需的。所以,您不必担心 - 只要没有带有 "Folder1" 前缀的 blob,就可以了。

在任何 blob 容器下,都不存在真正的文件夹或目录。它们是用于管理容器下 blob 的文件夹结构的虚拟目录,如果删除了具有任何虚拟目录或文件夹的所有 blob,则不存在此类文件夹。都是文件夹结构的逻辑表示,你可以忽略任何容器下的文件夹。

但是对于容器来说,如果你想清理整个容器,你需要在删除它的blob之后手动删除容器。

尝试使用适用于 .NET 的 Azure Blob 存储客户端库 v12。

            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