2013-02-18 35 views

答えて

10

それはブロブのETagプロパティに対してチェックするようにコードへのアクセス条件を追加 - この名前の塊がある(どんなのETagを持っていない場合は、ワイルドカードが許可されているので、我々は唯一のアップロードを許可しますこのブロブ名は存在しますか?)

以下で説明するように、StorageExceptionが発生します。

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

また、このように、ブロブが存在するかどうかを確認してからアップロードすることができます:

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

あなたがExistsメソッドを持っていない場合は、この答えChecking if a blob exists in Azure Storageをチェックしてください。

+4

、これは動作しない可能性があります - ブロブは、このスレッドの間で異なるスレッド/システム/クライアント 'によって作成されることがありますようExists'とアップロードステートメント。多くのクライアントを持つ環境でExistsソリューションを使用する前に、このシナリオをテストすることをお勧めします。 –

4

Rob Churchが提供する答えはOKと思われます。エラーの文字列をチェックすることはベストプラクティスではありませんとで改善される:

Azureのは今だけ追加するアクセス条件を持っている
 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

は、上書きしない:AccessCondition.GenerateIfNotExistsCondition()

定義:

構築リソースが存在しない場合にのみ操作が実行されるようなアクセス条件を設定します。

例:私はそれを理解として、あなたは、コンテナにアクセスする複数のクライアントがある場合

var accessCondition = AccessCondition.GenerateIfNotExistsCondition(); 
blockBlob.UploadFromStream(stream, accessCondition); 
関連する問題