2013-02-18 29 views

Trả lời

10

Thêm một điều kiện truy cập vào mã để nó kiểm tra chống lại ETag tài sản của blob - ký tự đại diện được cho phép, vì vậy chúng tôi muốn chỉ cho phép tải lên nếu không có các đốm màu với tên này có bất kỳ etag (đó là một cách nói vòng vo, tên này có tồn tại không).

Bạn nhận được Lưu trữ ngoại lệ như được nêu chi tiết bên dưới.

CloudBlockBlob blockBlob = container.GetBlockBlobReference(blobName); 
try { 
    blockBlob.UploadFromStream(stream, accessCondition: AccessCondition.GenerateIfNoneMatchCondition("*")); 
} catch (StorageException ex) { 
    if (ex.RequestInformation.HttpStatusCode == (int)System.Net.HttpStatusCode.Conflict) 
     // Handle duplicate blob condition 
    } 
    throw; 
} 
0

Bạn cũng có thể kiểm tra xem blob tồn tại và sau đó tải lên, như thế này:

CloudBlockBlob blockBlob = container.GetBlockBlobReference(blobName); 
if (!blockBlob.Exists()) 
{ 
    blockBlob.UploadFromStream(stream) 
} 

Nếu bạn không có một phương pháp Tồn tại, hãy kiểm tra câu trả lời này Checking if a blob exists in Azure Storage.

+4

Theo tôi được biết, điều này có thể không hoạt động nếu bạn có nhiều khách hàng truy cập vào container - như blob có thể được tạo ra bởi một thread khác nhau/system/client giữa chủ đề này của ' Exists' và câu lệnh tải lên. Bạn có thể muốn kiểm tra kịch bản này trước khi sử dụng giải pháp Exists trong một môi trường có nhiều khách hàng. –

4

Câu trả lời được cung cấp bởi Rob Church có vẻ ổn. Kiểm tra dây cho các lỗi không phải là thực hành tốt nhất và được cải thiện với:

 CloudBlockBlob blockBlob = container.GetBlockBlobReference(blobName); 
     try 
     { 
      blockBlob.UploadFromStream(stream, accessCondition: AccessCondition.GenerateIfNoneMatchCondition("*")); 
     } 
     catch (StorageException ex) 
     { 
      if (ex.RequestInformation.HttpStatusCode == (int)System.Net.HttpStatusCode.Conflict) 
      { 
       // Handle duplicate blob condition 
      } 
      throw; 
     } 
3

Azure hiện nay có một điều kiện tiếp cận đó sẽ chỉ làm tăng thêm, không ghi đè lên: AccessCondition.GenerateIfNotExistsCondition()

Định nghĩa:

Constructs một điều kiện truy cập sao cho một thao tác sẽ chỉ được thực hiện nếu tài nguyên không tồn tại.

Ví dụ:

var accessCondition = AccessCondition.GenerateIfNotExistsCondition(); 
blockBlob.UploadFromStream(stream, accessCondition); 
Các vấn đề liên quan