1

すべて、私は Windows azure から読み取り BLOB をチャンク化する方法を見つけようとしています。現在、いくつかの問題がありました。読み取りチャンクの合計サイズは、BLOB の合計サイズと等しくありません。テスト BLOB のサイズは 154805720 バイトで、すべてのチャンクの読み取りサイズは 10*1024*1024 です。チャンク読み取りの最後のバッファーが想定サイズ 8005080 バイトではないことがわかりました。常に 4M です。ところで、このブロブを cloudbrerry ストレージ エクスプローラーでローカルにダウンロードしました。以前にアップロードした元のファイルと同じサイズです。したがって、ブロブの元のサイズは問題ないと確信しています。つまり、154805720 バイトです。これが私のコードです。レビューを手伝ってください。

        private static CloudBlobClient CreateBlobClient(StorageAccount account)
        {
            CloudBlobClient blobClient = null;
            CloudStorageAccount oStorageAccount = CreateStorageAccount(account);
            blobClient = oStorageAccount.CreateCloudBlobClient();
            blobClient.Timeout = new TimeSpan(2, 0, 0);
            blobClient.WriteBlockSizeInBytes = 4 * 1024 * 1024;
            blobClient.RetryPolicy = RetryPolicies.Retry(20, TimeSpan.Zero);

            return blobClient;
        }



        public static byte[] DownloadChunkFromBlob(StorageAccount account, string sContainerName, String sBlobName, int blobOffset, int bufferSize)
        {
            CloudBlobClient blobClient = CreateBlobClient(account);

            CloudBlobContainer container = blobClient.GetContainerReference(sContainerName);
            bool b = container.CreateIfNotExist();
            CloudBlob blob = container.GetBlobReference(sBlobName);

            using (var blobStream = blob.OpenRead())
            {
                var buffer = new byte[bufferSize];
                blobStream.Seek(blobOffset, SeekOrigin.Begin);
                int numBytesRead = blobStream.Read(buffer, 0, bufferSize);

                if (numBytesRead != bufferSize)
                {
                    var trimmedBuffer = new byte[numBytesRead];
                    Array.Copy(buffer, trimmedBuffer, numBytesRead);
                    return trimmedBuffer;
                }
                return buffer;
            }
        }
4

1 に答える 1

0

答えはOpenRead()、一度に最大 4 MB しか読み取れないことです。チャンクの読み取りサイズを設定すると、 4MB になります。すべて順調。

于 2012-11-01T03:56:38.247 に答える