【发布时间】:2020-10-09 17:53:13
【问题描述】:
我正在尝试通过内存流将 JSON 上传到 Azure blob。当我调用 UploadAsync 我的应用程序挂起。如果我将 UploadAsync 调用移到 StreamWriter 大括号之外,我会得到一个 System.ObjectDisposedException: 'Cannot access a closed Stream。'例外。如何将 JSON 流式传输到 blob?
var blobClient = new BlobClient(new Uri(storageUri), options);
var serializer = JsonSerializer.Create(this.serializerSettings);
using (var stream = new MemoryStream())
{
using (var writer = new StreamWriter(stream))
{
serializer.Serialize(writer, job);
await blobClient.UploadAsync(stream, overwrite: true, cancellationToken: cancellationToken);
}
}
【问题讨论】:
-
1) 您需要在序列化后刷新
StreamWriter,最好将其放在using语句中并且不关闭底层流(参见here)。 2)您需要在上传之前通过设置stream.Position = 0来倒带MemoryStream。不知道这些是否导致挂起。 -
感谢您的回复。我查看了那个帖子,但它没有显示正在刷新的流。
-
通过
using语句处理StreamWriter会刷新它。链接的答案显示了如何在不关闭基础流的情况下做到这一点。 -
谢谢,我已经使用链接的答案更新了我的答案。
标签: azure json.net blob azure-blob-storage memorystream