2015-04-19 124 views
1

我知道Azure沒有實際的子路徑,但是如果我有例如container/projectID/iterationNumber/filename.jpg並且我刪除了一個項目,如何從ProjectID中刪除?通過編碼可以嗎?從Azure存儲中刪除「子路徑」

我不想使用天藍色的應用程序,因爲我正在創建一個Web應用程序。

由於提前

編輯

這是由微軟提供的代碼到目標上的具體項目:

// 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(); 

SystemDesignModel

public static SystemDesign returnImageURL(IListBlobItem item) 
    { 

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

     } 
     return null; 
    } 

} 

回答

3

如您所知,blob存儲沒有子文件夾的概念。它只有2級的層次結構 - container & blobs。所以實質上,子文件夾只是您附加到blob名稱的前綴。在你的例子中,你上傳的實際文件是filename.jpg,但是從blob存儲角度來看它的名字是projectID/iterationNumber/filename.jpg

由於沒有子文件夾的概念,因此您無法像在本地計算機上那樣刪除它。但有一種方法。 Blob存儲提供了一種方式到search for blobs starting with a certain blob prefix。因此,您必須首先列出以某些前綴開頭的所有斑點(您的案例中爲projectID),然後刪除因列表操作而返回的斑點。

看看下面的示例代碼:

 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); 
+0

@Guarav Mantri的變種'listingResult = container.ListBlobsSegmented( 「15」,代幣);'返回一個404錯誤,即使我知道它的存在 – DodoSombrero

+0

你是否改變了「容器」的名稱來與你的容器名稱相匹配 - var container = storageAccount.CreateCloudBlobClient()。GetContainerReference(「container」);'? –

+0

噢,確定,但是'blob爲ICloudBlob).DeleteIfExists()'指向一個空引用。我會檢查爲什麼 – DodoSombrero