我正在尝试将文件上传到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
。使用注释行尝试通过流进行上传也不成功。Started Thread <ThreadNumber>
blobReference.UploadFromFileAsync()
的调用中放置无效路径会按预期方式抛出FileNotFoundException
。netcoreapp2.0
降级到netcoreapp2.1
,但没有成功。答案 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,现在所有方法都是异步的。如果不等待所有异步方法调用,则可能会出现静默失败。问题下方的评论帮助我弄清楚了。