2016-08-30 8 views
1

コンテンツをazure BLOBにアップロードしようとしていますが、サイズは32 MBを超えています。以下のC#コードスニペット:Azure BLOBブロックのアップロードの上限を32 MBから増やす

Exception thrown: 'Microsoft.WindowsAzure.Storage.StorageException' in Microsoft.WindowsAzure.Storage.dll 

Additional information: The remote server returned an error: (404) Not Found. 

として

ブロックブロブアップロードがより大きいthisあたり:

CloudBlockBlob blob = _blobContainer.GetBlockBlobReference(blobName); 
blob.UploadFromByteArray(contents, 0, contents.Length, AccessCondition.GenerateIfNotExistsCondition(), options:writeOptions); 

毎回ブロブが32メガバイト以上である、上記の例外が発生しますこのプロパティの値 ストレージクライアントはファイルをブロックに分割します。

これを有効にするコードは別にしてください。

+0

私はwriteOptionsパラメータなしであなたのコードを試しました、そして、それは35MBのファイルでうまく動作します。 – fred

+0

私はまた、エラーなしでブロックBLOBに35 MBのバイト配列をアップロードすることができました。クライアントライブラリは、このメソッドを使用するときにデータをブロックとしてアップロードする作業を処理します。あなたがする必要があることは他にありません。 –

+0

あなたのコードに関する1つの問題:UploadFromByteArrayのオーバーロードはありません。この引数の組み合わせはこのコードをコンパイルするべきではありません。 –

答えて

2

デフォルトでは、ストレージクライアントの最大ブロックサイズは32 MBです。ブロックBLOBアップロードがSingleBlobUploadThresholdInBytesプロパティの値より大きい場合、ストレージクライアントはファイルをブロックに分割します。

Tamra氏によると、ストレージクライアントは、ファイルをブロックに分割する作業を処理します。ここで私はあなたにそれをよりよく理解させるためのテストをしています。

コードサンプル

CloudBlockBlob blob = container.GetBlockBlobReference(blobName); 
var writeOptions = new BlobRequestOptions() 
{ 
    SingleBlobUploadThresholdInBytes = 50 * 1024 * 1024, //maximum for 64MB,32MB by default   
}; 
blob.UploadFromByteArray(contents, 0, contents.Length, AccessCondition.GenerateIfNotExistsCondition(), options: writeOptions); 

シナリオ

  1. あなたは、サイズがSingleBlobUploadThresholdInBytesプロパティにすぎないブロックブロブを作成する場合は、その全体でそれをアップロードできます1回の書き込み操作で実行できます。

    UploadFromByteArrayメソッドを呼び出すと、Fiddler経由でネットワークパッケージをキャプチャすることでわかります。

  2. ブロックブロブのアップロードのサイズはSingleBlobUploadThresholdInBytesプロパティの値よりも大きい場合、ストレージクライアントは自動的にブロックにファイルを分割します。

    私はサイズがほぼ90メガバイトで、次のように、あなたは違いを見つけることができるブロブアップロード:スナップショットの際

    を、あなたはそのストレージクライアントが4メガバイトのあるブロックにファイルを破る見つけることができますブロックを同時にアップロードすることができます。

ブロブが32メガバイトを超えるたびに、上記のあなたが見つけることUploadFromByteArrayメソッドを呼び出すときは、SingleBlobUploadThresholdInBytesプロパティを設定したり、ネットワークのパッケージを捕獲しようとすることができ例外

を上げます詳細なエラー。

関連する問題