有没有办法将流对象直接创建到Azure Blob或Azure Block Storage Blob。
即
var s = new AzureStream(blockObject)
ms.CopyTo(s);
s.position = 200;
ms.CopyTo(s);
s.Read...这将允许一些令人惊叹的交互,比如将数据库索引存储在azure blob中,而不需要将它们拉到本地。
发布于 2019-04-26 01:08:20
不确定这是否回答了您的问题,但您可以从blob中读取一定范围的字节。直接使用REST API时,您可以在Range或x-ms-range头部中指定要读取的字节数。
在使用C# SDK时,可以使用DownloadRangeToStream方法,类似于:
using (var ms = new MemoryStream())
{
long offset = 200;
long bytesToRead = 1024;
blob.DownloadRangeToStream(ms, offset, bytesToRead);
}发布于 2019-04-26 01:38:01
如果你的问题是,“我可以将Streams与Azure blob一起使用吗”,以避免在任何时间点都需要在内存中保存整个blob大小,那么答案绝对是肯定的。
例如,在读取块blobs时,根据此answer here,可以使用CloudBlob.OpenReadAsync等方法将blobs作为流句柄进行访问。默认缓冲区大小为4MB,但可以通过StreamMinimumReadSizeInBytes等属性进行调整。在这里,我们将blob流复制到另一个打开的输出流:
using (var stream = await myBlockBlob.OpenReadAsync(cancellationToken))
{
await stream.CopyToAsync(outputStream);
}类似地,您可以直接使用write a stream进入Blob Storage:
await blockBlob.UploadFromStreamAsync(streamToSave, cancellationToken);https://stackoverflow.com/questions/55853989
复制相似问题