使用 UploadFromStreamAsync 方法上传 azure blob

Posted

技术标签:

【中文标题】使用 UploadFromStreamAsync 方法上传 azure blob【英文标题】:upload azure blob using UploadFromStreamAsync Method 【发布时间】:2018-12-29 13:44:59 【问题描述】:

问题

我正在尝试生成 Pdf 并创建 MemoryStream 对象并尝试将该流上传到 azure Blob Storage。到目前为止,我已经尝试过下面的代码,但是 blob 没有上传到 azure,而且我使用 azure sdk 的流方法上传的那个 blob 的名称是什么

代码

var memoryStream = new MemoryStream(byteArray, 0, byteArray.Length);
var cred = new StorageCredentials("foo", "key");
var account = new CloudStorageAccount(cred, true);
var client = account.CreateCloudBlobClient();
var container = client.GetContainerReference("container");
CloudBlockBlob sourceBlob = container.GetBlockBlobReference("foo/bar");
var attachment =  sourceBlob.UploadFromStreamAsync(memoryStream);

【问题讨论】:

首先突出的是在调用UploadFromStreamAsync时缺少await 【参考方案1】:

正如@Kirk 所说,使用await sourceBlob.UploadFromStreamAsync(memoryStream); 而不是var attachment = sourceBlob.UploadFromStreamAsync(memoryStream); 否则您的代码将在上传完成之前退出。

注意你的方法应该改成public async Task methodname(),你会看到VS显示的相关提示。

一些参考资料

Async and Await How and when to use async and-await

请参阅container.GetBlockBlobReference("blobname");,用于获取 blob 引用的字符串是上传的 blob 的名称。

【讨论】:

以上是关于使用 UploadFromStreamAsync 方法上传 azure blob的主要内容,如果未能解决你的问题,请参考以下文章

Azure 云存储 SDK UploadFromStreamAsync 不起作用

Azure 数据湖:将数据从 Blob 移动到 ADLS 时面临问题

测试使用

第一篇 用于测试使用

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇