Azure Blob上传在ASP .Net Core应用程序中不起作用

时间:2018-09-03 07:00:20

标签: c# azure asp.net-core asp.net-core-2.1

我正在尝试将文件上传到Asp .Net Core中的Azure blob存储。一切似乎都正常,但没有文件上传。这是我的代码段:

        var blobReference = GetBlobReference();
        rawData.Position = 0;

        //  var result = blobReference.UploadFromStreamAsync(rawData);
        var result = blobReference.UploadFromFileAsync("C:\\users\\tjaartb\\Downloads\\DebitOrderMandate.pdf");
        result.GetAwaiter().GetResult();
        var blobPath = blobReference.Uri.ToString();

发生了什么事?

调试器将跨过result.GetAwaiter().GetResult(),不会发生任何异常。在result调用之后检查GetResult() Task变量显示任务状态为RanToCompletion,并且exception属性为空。我的Blob容器已在前面的代码中成功创建,表明与Blob存储的连接成功。 GetResult()立即完成,因此似乎什么也没发生。

我检查过的事情

  • rawData是填充文件数据的MemoryStream。使用注释行尝试通过流进行上传也不成功。
  • 与Azure的连接正常。
  • 文件路径存在。
  • 没有引发异常。
  • 调试窗口输出中唯一的内容是Started Thread <ThreadNumber>
  • 在对blobReference.UploadFromFileAsync()的调用中放置无效路径会按预期方式抛出FileNotFoundException
  • 我尝试将项目从netcoreapp2.0降级到netcoreapp2.1,但没有成功。

3 个答案:

答案 0 :(得分:0)

  

我在该方法中实现的接口是一个更大的生态系统的一部分,该生态系统没有异步签名。重构它需要大量的努力。

您可以使用Wait()代替await来实现异步签名。请参考以下代码:

CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connection);
CloudBlobClient cloudBlobClient = storageAccount.CreateCloudBlobClient();
var cloudBlobContainer = cloudBlobClient.GetContainerReference("containername");
CloudBlockBlob blob = cloudBlobContainer.GetBlockBlobReference("DebitOrderMandate.pdf");
using (var fileStream = System.IO.File.OpenRead("C:\\users\\tjaartb\\Downloads\\DebitOrderMandate.pdf"))
{
    blob.UploadFromStreamAsync(fileStream).Wait();
}

答案 1 :(得分:0)

为Blob名称添加/前缀会导致无提示失败。该文件根本不上传。删除/前缀可以解决此问题。

答案 2 :(得分:0)

使用.NET Core 2.1和WindowsAzure.Storage 9.3.2,现在所有方法都是异步的。如果不等待所有异步方法调用,则可能会出现静默失败。问题下方的评论帮助我弄清楚了。