Pokud máte pouze storage account (CloudBlobClient
) a URI blobu v něm, není úplně jednoduché existenci blobu ověřit. Přesněji řečeno při touze použít obvyklou metodu ICloudBlob.Exists()
, musíte mít na daný blob referenci. Pro její získání z URI je tu metoda CloudBlobClient.GetBlobReferenceFromServer(Uri blobUri)
, která však při svém zavolání dělá HEAD request na blob a snaží se dotáhnout jeho metadata. Pokud blob neexistuje, vyhodí už tato metoda výjimku a na nějaké Exists()
se už ani nedostane.
Výjimku lze zachytit s pěkným pattern-matchingem:
ICloudBlob blob; try { blob = blobClient.GetBlobReferenceFromServer(new Uri(url)); } catch (Microsoft.WindowsAzure.Storage.StorageException ex) when ((ex.InnerException is System.Net.WebException wex) && (wex.Response is System.Net.HttpWebResponse httpWebResponse) && (httpWebResponse.StatusCode == System.Net.HttpStatusCode.NotFound)) { // blob does not exist, do whatever you need here return null; } // further code able to use the blob-reference
Pokud s referencí na blob nepotřebujete dále pracovat, tak samozřejmě můžete jeho existenci ověřit vlastním jednoduchým HTTP HEAD requestem z libovolného HTTP klienta.
Každopádně je zde obskurní už to, že máte na daný blob pouze plné URL. Za příčetných okolností byste měli mít k dispozici strukturovanou informaci o názvu containeru a blobu v něm, což by šlo samozřejmě z URL i vyparsovat.