0

我正在尝试从 Azure 函数访问 Blob 存储中的内容。我有以下内容:

#r "Newtonsoft.Json"

using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Blob;

public static async Task<HttpResponseMessage> Run(HttpRequest req, ILogger log)
{   
    string path = req.Query["path"];   

    string storageConnectionString = "...";
    CloudStorageAccount blobAccount = CloudStorageAccount.Parse(storageConnectionString);
    CloudBlobClient blobClient = blobAccount.CreateCloudBlobClient();
    CloudBlobContainer blobContainer = blobClient.GetContainerReference("content");
    CloudBlockBlob cloudBlockBlob = blobContainer.GetBlockBlobReference(path);*

    return new HttpResponseMessage(HttpStatusCode.OK) {
        Content = /* to do - content of blob */
    };    
}

但是,我很难告诉函数识别 Microsoft.WindowsAzure.Storage 命名空间:

2019-11-07T09:59:57.729 [Error] run.csx(7,17): error CS0234: The type or namespace name 'WindowsAzure' does not exist in the namespace 'Microsoft' (are you missing an assembly reference?)

我觉得我对 Azure Functions 的理解缺少一些重要的东西,因为从 Azure 函数中引入命名空间/包以与 Azure 一起工作不应该是一个挑战。

非常感谢!

4

1 回答 1

0

在 c# script Function 中,不需要初始化 blob 客户端即可读取 blob。Azure 函数提供 Blob 绑定以读取/写入 blob,请查看此文档:Blob Input - example

首先转到您的功能集成,将其设置如下图所示。有了这个,只需绑定inputBlob到流以读取内容或绑定到CloudBlockBlob类型并使用该CloudBlockBlob方法。

并且路径支持绑定到容器,并且在函数中只绑定到CloudBlobContainer类型。

在此处输入图像描述

下面是我读取文本文件的测试代码。

#r "Newtonsoft.Json"

using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
using System.IO;
using System.Collections.Generic;

public static void Run(HttpRequest req, Stream inputBlob,ILogger log)
{
    StreamReader reader = new StreamReader(inputBlob);
    string  oldContent = reader.ReadToEnd();
    log.LogInformation($"oldContent:{oldContent}");  
}

在此处输入图像描述

希望这可以帮助你,如果你还有其他问题,请随时让我知道。

于 2019-11-07T12:13:47.610 回答