无法使用 Azure.Storage.Blobs NuGet 包将文件上传到 Azure Blob 存储
Posted
技术标签:
【中文标题】无法使用 Azure.Storage.Blobs NuGet 包将文件上传到 Azure Blob 存储【英文标题】:Unable to upload a file to Azure Blob Storage using Azure.Storage.Blobs NuGet package 【发布时间】:2021-12-04 11:49:54 【问题描述】:我正在尝试使用 C# 使用 .NET Core (V3.1) 控制台应用程序将示例 doc 文件上传到 azure 存储 blob。我正在本地运行 Visual Studio 2019 中的控制台应用程序。
我有
第 1 步:创建 .NET Core 控制台应用程序和已安装的 Nuget 包
Azure.Storage.Blobs
Azure.Storage.Common
第 2 步:创建一个 Azure 存储帐户和名为:“文件”的容器
Step3:在本地机器上创建一个word/pdf文档。
Step4:初始化存储连接字符串、容器名、文件路径
Step5:在控制台应用程序中上传文件然后在本地调试以进行测试的代码。
整个方法:
public static async Task upload_ToBlob(string storageAccount_connectionString, string fileToUpload, string containerName)
try
Console.WriteLine("Inside upload method");
// Get a reference to a container named "sample-container" and then create it
BlobContainerClient blobContainerClient = new BlobContainerClient(storageAccount_connectionString, containerName);
// Get a reference to a blob named "fileToUpload" in a container named "files"
string filename_withExtension = Path.GetFileName(fileToUpload);
BlobClient blob = blobContainerClient.GetBlobClient(filename_withExtension);
// Upload local file
await blob.UploadAsync(fileToUpload);
Console.WriteLine("Upload Completed!");
catch (Exception ex)
Console.WriteLine(ex.Message);
class Program
static async Task Main()
string storageAccount_connectionString = "DefaultEndpointsProtocol=https;AccountName=sghackathondemo;AccountKey=kCzwrMVmG8r4E9d1q9LKA0W8OuCtPp3WWbeBWoMfyW/6idSN0wPPU+QBnBVndAv+v9tS63gcnpUY1R1CnsHB8A==;EndpointSuffix=core.windows.net";
string storageAccount_ContainerName = "files";
string filePath = @"D:\Learning\test.txt";
await upload_ToBlob(storageAccount_connectionString, filePath, storageAccount_ContainerName).ConfigureAwait(false);
我既没有遇到异常,也没有无法上传文件。 await blob.UploadAsync(filePath);
后自动 Visual Studio (2019) 调试过程停止【问题讨论】:
Visual Studio 正在关闭自己? 你能提供一个***.com/help/minimal-reproducible-example吗?可以测试的东西。 把它包装在一个 try catch 中,看看有什么异常(如果有的话) @ErmiyaEskandary 调试进程正在停止。我也尝试过 try Catch。什么都没有进入Catched。 显示整个方法,包括签名。是async void
吗?这是您的应用程序的结尾(即它在结尾并终止)吗?
【参考方案1】:
我终于明白为什么文件没有上传到存储 blob 以及为什么 Visual Studio 调试会自动停止。
UploadAsync 接受 Stream 作为输入。
通过以下小代码 sn-p 更改,它工作正常。
// Open this file and upload it to blob
using (FileStream fileStream = File.OpenRead(filePath))
await blob.UploadAsync(fileStream);
【讨论】:
这不是原因。这似乎是为什么。但事实并非如此。原因是您没有在 Main 中等待您的方法,您也需要将其设为异步。它似乎起作用的部分原因是新添加的 using 范围 @pinkfloydx33 是的,我将 Main 更改为异步,但除非我将 Stream 作为输入传递给 UploadAsync,否则文件仍未上传。以上是关于无法使用 Azure.Storage.Blobs NuGet 包将文件上传到 Azure Blob 存储的主要内容,如果未能解决你的问题,请参考以下文章
Azure.Storage.Blobs.ServiceRestClient.GetUserDelegationKey:System.ObjectDisposedException:无法访问已关闭的流
如何使用 C# 中的 Azure.Storage.Blobs 从 Azure 存储 Blob 以 ByteArray 格式获取文件
如何使用 Azure.Storage.Blobs 程序集对 Azure Blob 存储操作设置重试策略?