如何使用 Azure.Storage.Blobs 上传流

Posted

技术标签:

【中文标题】如何使用 Azure.Storage.Blobs 上传流【英文标题】:How to upload stream with Azure.Storage.Blobs 【发布时间】:2020-09-28 11:07:15 【问题描述】:

我正在尝试将数据上传/存储到 azure blob。数据是从 xmlSerialize 对象生成的。由于结果可能很大,而且我的程序中不需要序列化输出,我想将数据直接流式传输到 blob 中。 这已通过 Microsoft.Azure.Storage.Blob 解决: uploading-datatable-to-azure-blob-storage 但我使用的是Azure.Storage.Blobs,因为微软推荐了它,而另一个已被替换。它还支持身份验证。

预览解决方案依赖于获取 blob 的流对象,以便序列化程序可以使用它。但我看不出有任何方法可以用新的 API 做同样的事情。我错过了什么吗?

【问题讨论】:

【参考方案1】:

但我看不出有任何方法可以对新 API 做同样的事情。我失踪了吗 什么?

你是对的。新 SDK 中不支持获取 blob 的流对象。您需要将数据转换为流,然后在BlobClientBlockBlobClient 上使用UploadUploadAsync 方法来上传blob。

【讨论】:

“您需要将数据转换为流”是指将结果存储在 MemoryStream 中还是将其写入临时文件? 存储在内存流中。 或者,如果您愿意,可以将其保存在文件中。然后您可以分块读取文件并使用BlockBlobClient中提供的方法上传它们。 通过来自 Microsoft.Azure.WebJobs 事件的 IBinder 是可能的。使用 (var sw = binder.Bind(new BlobAttribute(blobNameOut, FileAccess.Write))) 使用 (var writer = new StreamWriter(sw)) await WriteMethod(streamReader, writer,cancellationToken);如果您知道是否可以使用我感兴趣的任何实现来实例化 IBinder :)【参考方案2】:

在https://***.com/a/65395088/2589083查看答案

新的 Azure.Storage.Blobs.Specialized.BlockBlobClient(System.Uri uri)

【讨论】:

以上是关于如何使用 Azure.Storage.Blobs 上传流的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 C# 中的 Azure.Storage.Blobs 从 Azure 存储 Blob 以 ByteArray 格式获取文件

如何从 Azure.Storage.Blobs 模拟 GetBlobsByHierarchy()?

Azure SAS 令牌不适用于 Azure.Storage.Blobs BlobServiceClient

C# Azure.Storage.Blobs SDK 如何列出和压缩容器中的所有文件并将压缩文件存储在另一个容器中

VS2015 无法安装包 Azure.Storage.Blobs.12.5.1

无法使用 Azure.Storage.Blobs NuGet 包将文件上传到 Azure Blob 存储