我使用的包是Azure.Storage.Blobs
(v12.9.1),我正试图删除一个blob。
//path - storage url without token
public async Task<bool> DeleteFilefromStorage(string path)
{
try
{
BlobServiceClient blobServiceClient = new BlobServiceClient(Helper.StorageCS);
string containerName = Helper.ContainerName;
Uri uri = new Uri(path);
string filename = Path.GetFileName(uri.LocalPath);
BlobContainerClient blobContainerClient = blobServiceClient.GetBlobContainerClient(containerName);
var blob = blobContainerClient.GetBlobClient(filename);
return await blob.DeleteIfExistsAsync();
}
catch
{
throw;
}
}
您的代码失败的原因是因为您的blob URL类似于https://mystorage.blob.core.windows.net/mycontainer/files/ba143f66-ba18-478a-85d6-0d661e6894dd.xlsx
,其中文件(ba143f66-ba18-478a-85d6-0d661e6894dd.xlsx
)位于一个名为files
的虚拟文件夹内。
但是,当您执行string filename = Path.GetFileName(uri.LocalPath);
时,它只会返回ba143f66-ba18-478a-85d6-0d661e6894dd.xlsx
而不会返回files/ba143f66-ba18-478a-85d6-0d661e6894dd.xlsx
。
因此,当您试图删除该文件时,您将得到一个404错误。因为DeleteIfExistsAsync
方法会吃掉404 (Not Found)
错误,所以你不会得到任何错误,但同时blob也不会被删除(因为它不存在)。