Azure Blob Storageに特定のファイルが存在することを確認したいのですが。ファイル名を指定して確認できますか?ファイルが見つからないというエラーが発生するたびに。
この拡張メソッドはあなたを助けるでしょう:
public static class BlobExtensions
{
public static bool Exists(this CloudBlob blob)
{
try
{
blob.FetchAttributes();
return true;
}
catch (StorageClientException e)
{
if (e.ErrorCode == StorageErrorCode.ResourceNotFound)
{
return false;
}
else
{
throw;
}
}
}
}
使用法:
static void Main(string[] args)
{
var blob = CloudStorageAccount.DevelopmentStorageAccount
.CreateCloudBlobClient().GetBlobReference(args[0]);
// or CloudStorageAccount.Parse("<your connection string>")
if (blob.Exists())
{
Console.WriteLine("The blob exists!");
}
else
{
Console.WriteLine("The blob doesn't exist.");
}
}
http://blog.smarx.com/posts/testing-existence-of-a-windows-Azure-blob
var blob = client.GetContainerReference(containerName).GetBlockBlobReference(blobFileName);
if (blob.Exists())
//do your stuff
更新されたSDKでは、CloudBlobReferenceを取得したら、参照でExists()を呼び出すことができます。
[〜#〜]更新[〜#〜]
WindowsAzure.Storage v2.0.6.1を使用した私の実装
private CloudBlockBlob GetBlobReference(string filePath, bool createContainerIfMissing = true)
{
CloudBlobClient client = _account.CreateCloudBlobClient();
CloudBlobContainer container = client.GetContainerReference("my-container");
if ( createContainerIfMissing && container.CreateIfNotExists())
{
//Public blobs allow for public access to the image via the URI
//But first, make sure the blob exists
container.SetPermissions(new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccessType.Blob });
}
CloudBlockBlob blob = container.GetBlockBlobReference(filePath);
return blob;
}
public bool Exists(String filepath)
{
var blob = GetBlobReference(filepath, false);
return blob.Exists();
}
CloudBlockBlobのExistsAsync
メソッドを使用します。
bool blobExists = await cloudBlobContainer.GetBlockBlobReference("<name of blob>").ExistsAsync();
Microsoft.WindowsAzure.Storage.Blob version 4.3.0.を使用すると、次のコードが機能するはずです(このアセンブリの古いバージョンでは、多くの重大な変更があります)。
コンテナー/ブロブ名と指定されたAPIを使用します(現在、Microsoftは実際にこれを実装しているようです)。
return _blobClient.GetContainerReference(containerName).GetBlockBlobReference(blobName).Exists();
Blob URIを使用する(回避策):
try
{
CloudBlockBlob cb = (CloudBlockBlob) _blobClient.GetBlobReferenceFromServer(new Uri(url));
cb.FetchAttributes();
}
catch (StorageException se)
{
if (se.Message.Contains("404") || se.Message.Contains("Not Found"))
{
return false;
}
}
return true;
(blobが存在しない場合、属性の取得は失敗します。ダーティ、私は知っています:)
新しいパッケージの使用Azure.Storage.Blobs
BlobServiceClient blobServiceClient = new BlobServiceClient("YourStorageConnectionString");
BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient("YourContainerName");
BlobClient blobClient = containerClient.GetBlobClient("YourFileName");
次に、存在するかどうかを確認します
if (blobClient.Exists()){
//your code
}