【发布时间】:2014-05-10 21:21:46
【问题描述】:
如果有人对DownloadRangeToStream函数有经验,我将不胜感激。
Here他们说参数“length”是数据的长度,但根据我的经验,它是要下载的段的上部位置,例如"length" - "offset" = 数据的实际长度。
如果有人能给我一些下载块的代码,我也非常感激,因为前面提到的功能似乎不起作用。
感谢您的帮助
【问题讨论】:
标签: c# azure azure-storage
如果有人对DownloadRangeToStream函数有经验,我将不胜感激。
Here他们说参数“length”是数据的长度,但根据我的经验,它是要下载的段的上部位置,例如"length" - "offset" = 数据的实际长度。
如果有人能给我一些下载块的代码,我也非常感激,因为前面提到的功能似乎不起作用。
感谢您的帮助
【问题讨论】:
标签: c# azure azure-storage
试试这个代码。它通过将其拆分为 1 MB 块来下载一个大 blob。
static void DownloadRangeExample()
{
var cloudStorageAccount = CloudStorageAccount.DevelopmentStorageAccount;
var containerName = "container";
var blobName = "myfile.zip";
int segmentSize = 1 * 1024 * 1024;//1 MB chunk
var blobContainer = cloudStorageAccount.CreateCloudBlobClient().GetContainerReference(containerName);
var blob = blobContainer.GetBlockBlobReference(blobName);
blob.FetchAttributes();
var blobLengthRemaining = blob.Properties.Length;
long startPosition = 0;
string saveFileName = @"D:\myfile.zip";
do
{
long blockSize = Math.Min(segmentSize, blobLengthRemaining);
byte[] blobContents = new byte[blockSize];
using (MemoryStream ms = new MemoryStream())
{
blob.DownloadRangeToStream(ms, startPosition, blockSize);
ms.Position = 0;
ms.Read(blobContents, 0, blobContents.Length);
using (FileStream fs = new FileStream(saveFileName, FileMode.OpenOrCreate))
{
fs.Position = startPosition;
fs.Write(blobContents, 0, blobContents.Length);
}
}
startPosition += blockSize;
blobLengthRemaining -= blockSize;
}
while (blobLengthRemaining > 0);
}
【讨论】: