从 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);
我知道 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);