Все, я пытаюсь найти способ чтения BLOB-объекта из Windows Azure. Теперь у меня возникла проблема с этим, общий размер считанного фрагмента не равен общему размеру BLOB-объекта. Размер моего тестового большого двоичного объекта составляет 154805720 байт, а размер чтения каждого фрагмента составляет 10 * 1024 * 1024. Я обнаружил, что последний буфер прочитанного фрагмента не имеет предполагаемого размера 8005080 байт. Он всегда равен 4 МБ. Кстати, я загрузил этот большой двоичный объект в локальное хранилище Cloudbrerry. он того же размера, что и исходный файл, который я загрузил ранее. поэтому я уверен, что исходный размер 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;
}
}