2012-06-14 43 views
9

Tôi muốn kiểm tra tệp cụ thể tồn tại trong Bộ nhớ Azure Blob. Có thể kiểm tra bằng cách chỉ định tên tệp của nó không? Mỗi lần tôi nhận được lỗi File Not Found.Cách kiểm tra xem tệp Azure Blob có tồn tại hay không

+0

Tôi nghĩ câu hỏi này là bản sao của http://stackoverflow.com/questions/2642919/checking-if-a-blob-exists-in-azure-storage này. –

Trả lời

14

phương pháp Phần mở rộng này sẽ giúp bạn:

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; 
      } 
     } 
    } 
} 

Cách sử dụng:

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

+3

Trường hợp ngoại lệ có thể tốn kém ... –

+0

Có, nhưng tôi không nghĩ có cách khác để kiểm tra sự tồn tại của đốm màu. –

+2

Lưu ý: tính năng này không hoạt động với SDK mới. Các câu trả lời khác là giải pháp. – Tincan

7

Với SDK cập nhật, một khi bạn có CloudBlobReference bạn có thể gọi Tồn tại() trên của bạn tài liệu tham khảo.

CẬP NHẬT

Các tài liệu liên quan đã được chuyển đến 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_OperationContext_

thực hiện của tôi sử dụng 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(); 
    } 
+2

nhưng nó luôn trả về false. Có ai đang có vấn đề nào không? –

+0

Xác minh khả năng hiển thị của nhóm của bạn và chính tệp đó. Nếu nó hiển thị công khai, hãy thử truy cập nó qua trình duyệt. Có thể URI của bạn không chính xác. –

+0

Tôi nhận được tên với .ListBlobs() trên cùng một cá thể BlobService, vì vậy nó không phải là vấn đề hiển thị/quyền. –

18
var blob = client.GetContainerReference(containerName).GetBlockBlobReference(blobFileName); 

if (blob.Exists()) 
//do your stuff 
+8

Thử thêm một số ngữ cảnh cho mã của bạn để giúp người đó đặt câu hỏi. –

1

Sử dụng Microsoft. WindowsAzure.Storage.Blob ve rsion 4.3.0.0, mã sau sẽ hoạt động (có nhiều thay đổi đột phá với các phiên bản cũ hơn của hội đồng này):

Tên container/blob và API đã cho (có vẻ như Microsoft đã triển khai thực tế điều này) :

return _blobClient.GetContainerReference(containerName).GetBlockBlobReference(blobName).Exists(); 

Sử dụng blob URI (workaround):

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; 

(Fetch thuộc tính sẽ thất bại nếu các blob là không tồn tại. Bẩn, tôi biết :)

+0

@Steve, điều này có giúp ích gì không? bạn đang sử dụng phiên bản nào của ứng dụng Lưu trữ? –

Các vấn đề liên quan