web-dev-qa-db-ja.com

Azure Blobファイルが存在するかどうかを確認する方法

Azure Blob Storageに特定のファイルが存在することを確認したいのですが。ファイル名を指定して確認できますか?ファイルが見つからないというエラーが発生するたびに。

16
Hope

この拡張メソッドはあなたを助けるでしょう:

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

15
Jakub Konecki
var blob = client.GetContainerReference(containerName).GetBlockBlobReference(blobFileName);

if (blob.Exists())
 //do your stuff
29
sam

更新されたSDKでは、CloudBlobReferenceを取得したら、参照でExists()を呼び出すことができます。

[〜#〜]更新[〜#〜]

関連ドキュメントが https://docs.Microsoft.com/en-us/dotnet/api/Microsoft.windowsazure.storage.blob.cloudblob.exists?view=azurestorage-8.1.3#Microsoft_WindowsAzure_Storage_Blob_CloudBlob_Exists_Microsoft_WindowsAzure_Storage_Blob_BlobRequestOptions_Microsoft_WindowsAzure_Storage_Storage_Microsoft_WindowsAzure

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();
    }
10
Babak Naffas

CloudBlockBlobのExistsAsyncメソッドを使用します。

bool blobExists = await cloudBlobContainer.GetBlockBlobReference("<name of blob>").ExistsAsync();
4
user3613932

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が存在しない場合、属性の取得は失敗します。ダーティ、私は知っています:)

2
d.popov

新しいパッケージの使用Azure.Storage.Blobs

BlobServiceClient blobServiceClient = new BlobServiceClient("YourStorageConnectionString");
BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient("YourContainerName");
BlobClient blobClient = containerClient.GetBlobClient("YourFileName");

次に、存在するかどうかを確認します

if (blobClient.Exists()){
 //your code
}
0
rc125