【问题标题】:reading content of blob from azure function从 azure 函数读取 blob 的内容
【发布时间】:2019-12-11 10:13:29
【问题描述】:

我正在尝试读取 azure 函数中 blob 的内容。

代码如下:

注意: 如果我注释掉 using 块并返回 blob,即

return new OkObjectResult(blob);

我取回了 blob 对象。

但是,如果我使用 using 块,我会得到 500。

知道为什么我无法获取内容吗?

string storageConnectionString = "myConnectionString";
CloudStorageAccount storageAccount;
CloudStorageAccount.TryParse(storageConnectionString, out storageAccount);
CloudBlobClient cloudBlobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = cloudBlobClient.GetContainerReference("drawcontainer");


var blob = drawingsContainer.GetBlockBlobReference("notes.txt");

using (StreamReader reader = new StreamReader(blob.OpenRead()))
{
    content = reader.ReadToEnd();
}
return new OkObjectResult(content);

【问题讨论】:

    标签: azure azure-functions azure-blob-storage azure-function-async


    【解决方案1】:

    HTTP 500 表示代码有错误。最可能的错误原因是变量“content”。在 using 块之外定义变量“content”,因为在其中定义的content 变量的范围仅限于该块。在 using 块之外声明它,如下所示:

        try
        {
            string content = string.Empty;
            using (StreamReader reader = new StreamReader(blob.OpenRead()))
            {
                content = reader.ReadToEnd();
            }
        }
        catch (Exception ex)
        {
            // Log exception to get the details.    
        }
    

    始终使用 try catch 来获取有关代码中错误的更多详细信息。

    【讨论】:

    • 感谢您的回答。变量内容不是问题(即使它的声明丢失)。我放置了 try catch 但没有收到描述性错误
    • 我放置了一些日志,我认为问题在于 blob.OpenRead() - 我认为 Blob 上可能不存在 OpenRead,但我仍然没有解决问题
    • 不断重复的错误是:error CS0103: The name 'CloudStorageAccount' does not exist in the current context
    • @Avi 您能否提供 nuget 包和框架详细信息?另外,请添加/编辑完整的代码sn-p。
    【解决方案2】:

    OpenRead 方法不存在,所以我使用了异步方法,它解决了。

    我在 VS 中创建了一个 azure 函数并将其发布后得到了这个解决方案。

    这是我使用的代码:

     public static class Function1
    {
        [FunctionName("Function1")]
        public static async Task<ActionResult> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]HttpRequest req, TraceWriter log)
        {
            log.Info("C# HTTP trigger function processed a request.");
            string storageConnectionString = "DefaultEndpointsProtocol=https;AccountName=avitest19a1c;AccountKey=<AccessKey>";
            CloudStorageAccount storageAccount = null;
            CloudStorageAccount.TryParse(storageConnectionString, out storageAccount);
            CloudBlobClient cloudBlobClient = storageAccount.CreateCloudBlobClient();
            CloudBlobContainer drawingsContainer = cloudBlobClient.GetContainerReference("drawcontainer");
    
            var blob = drawingsContainer.GetBlockBlobReference("notes.txt");
    
            string content = string.Empty;
            **var contentStream = await blob.OpenReadAsync();**
            using (StreamReader reader = new StreamReader(contentStream))
            {
                content = reader.ReadToEnd();
            }
    
            return new OkObjectResult(content);
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-20
      • 2022-01-23
      • 2019-05-09
      • 2019-01-28
      • 1970-01-01
      • 2019-12-20
      相关资源
      最近更新 更多