从 Azure 存储中删除 "subpath"

Delete "subpath" from Azure Storage

我知道 Azure 没有实际的子路径,但是如果我有例如 container/projectID/iterationNumber/filename.jpg 并且我删除了一个项目,我如何从 ProjectID 中删除?是否可以通过编码?

我不想使用 Azure 应用程序,因为我正在创建 Web 应用程序。

提前致谢

编辑:

这是 Microsoft 提供的针对特定项目的代码:

// Retrieve storage account from connection string.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
    CloudConfigurationManager.GetSetting("StorageConnectionString"));

// Create the blob client.
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

// Retrieve reference to a previously created container.
CloudBlobContainer container = blobClient.GetContainerReference("mycontainer");

// Retrieve reference to a blob named "myblob.txt".
CloudBlockBlob blockBlob = container.GetBlockBlobReference("myblob.txt");

// Delete the blob.
blockBlob.Delete(); 

系统设计模型

    public static SystemDesign returnImageURL(IListBlobItem item)
    {

        if (item is CloudBlockBlob)
        {
            var blob = (CloudBlockBlob)item;
            return new SystemDesign
            {
                URL = blob.Uri.ToString(),
            };

        }
        return null;
    }

}

如您所知,Blob 存储没有子文件夹的概念。它只有 2 级层次结构 - container & blobs。所以本质上,子文件夹只是附加到 blob 名称的前缀。在您的示例中,您上传的实际文件是 filename.jpg 但从 blob 存储的角度来看它的名称是 projectID/iterationNumber/filename.jpg.

由于没有子文件夹的概念,所以你不能像我们在本地电脑上那样删除它。不过有办法。 Blob 存储提供了一种方法 search for blobs starting with a certain blob prefix。因此,您要做的是首先列出所有以特定前缀开头的 blob(在您的情况下为 projectID),然后一次删除因列出操作而返回的 blob。

看看下面的示例代码:

        CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
CloudConfigurationManager.GetSetting("StorageConnectionString"));
        var container = storageAccount.CreateCloudBlobClient().GetContainerReference("container");
        BlobContinuationToken token = null;
        do
        {
            var listingResult = container.ListBlobsSegmented("blob-prefix (projectID in your case)", true, BlobListingDetails.None, 5000, token, null, null);
            token = listingResult.ContinuationToken;
            var blobs = listingResult.Results;
            foreach (var blob in blobs)
            {
                (blob as ICloudBlob).DeleteIfExists();
                Console.WriteLine(blob.Uri.AbsoluteUri + " deleted.");
            }
        }
        while (token != null);