随机访问流Azure块存储

问题描述 投票:1回答:2

有没有办法直接创建流对象Azure Blob或Azure块存储Blob。

IE

var s = new AzureStream(blockObject)
ms.CopyTo(s);
s.position = 200;
ms.CopyTo(s);
s.Read...

这将允许一些令人敬畏的交互,例如将数据库索引存储在azure blob中而不需要将它们拉到本地。

c# azure azure-blob-storage
2个回答
1
投票

不确定这是否能解答您的问题,但您可以从blob中读取一系列字节。直接使用REST API时,可以在Rangex-ms-range标头中指定要读取的字节。

使用C#SDK时,您可以使用DownloadRangeToStream方法,例如:

        using (var ms = new MemoryStream())
        {
            long offset = 200;
            long bytesToRead = 1024;
            blob.DownloadRangeToStream(ms, offset, bytesToRead);
        }

0
投票

如果您的问题是“我可以将Streams与Azure Blob一起使用”,以避免在任何时间点将blob的整个大小保留在内存中,那么答案绝对是肯定的。

例如,当读取块blob时,根据此answer here,可以使用CloudBlob.OpenReadAsync等方法将blob作为流句柄进行访问。默认缓冲区大小为4MB,但可以通过StreamMinimumReadSizeInBytes等属性进行调整。在这里,我们将blob流复制到另一个打开的输出流:

using (var stream = await myBlockBlob.OpenReadAsync(cancellationToken))
{
    await stream.CopyToAsync(outputStream);
}

类似的,你可以将write a stream直接导入Blob存储:

 await blockBlob.UploadFromStreamAsync(streamToSave, cancellationToken);
© www.soinside.com 2019 - 2024. All rights reserved.