无法使用 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.Storage.Blobs 程序集对 Azure Blob 存储操作设置重试策略?

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

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