Windows Azure Blob中的区块读取问题

Windows Azure Blob中的区块读取问题,azure,azure-storage,azure-storage-blobs,Azure,Azure Storage,Azure Storage Blobs,总之,我正在试图找到一种从windows azure中分块读取blob的方法。现在我遇到了一些问题,分块读取的总大小不等于blob的总大小。我的测试块大小是154805720字节,每个块读取大小是10*1024*1024。我发现区块读取的最后一个缓冲区不是假定的8005080字节大小,它总是4M。 顺便说一句,我已通过cloudbrerry存储资源管理器将此blob下载到本地。它和我之前上传的原始文件大小相同。所以,我确信blob的原始大小是可以的,这意味着154805720字节。 这是我的代码

总之,我正在试图找到一种从windows azure中分块读取blob的方法。现在我遇到了一些问题,分块读取的总大小不等于blob的总大小。我的测试块大小是154805720字节,每个块读取大小是10*1024*1024。我发现区块读取的最后一个缓冲区不是假定的8005080字节大小,它总是4M。 顺便说一句,我已通过cloudbrerry存储资源管理器将此blob下载到本地。它和我之前上传的原始文件大小相同。所以,我确信blob的原始大小是可以的,这意味着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;
            }
        }

答案是
OpenRead()
一次最多只能读取4MB。当我设置块读取大小为4MB时。一切都很好。

您能否通过运行Fiddler来确认您能够一次性读取初始块的10MB数据。看看这个线程:其中提到OpenRead()一次只能读取4MB的数据(请参见编辑2)。是的,您的评论很有帮助。当我发送4MB的块大小时,一切正常。我做了一些测试,在10MB模式下,我将每个块保存到一个临时文件中。每个临时文件大小都是10MB,只有最后一个块小于10MB,azure blob API似乎只读取4MB。这很奇怪。