C# 反序列化blob并使用blob';内容

C# 反序列化blob并使用blob';内容,c#,azure,visual-studio-2017,azure-functions,azure-blob-storage,C#,Azure,Visual Studio 2017,Azure Functions,Azure Blob Storage,我在azure blob中有一个json,我需要对其进行反序列化并从中获取字符串。字符串是blob的名称。然后,我需要将这个blob复制到一个存储容器中,这个blob是这个函数的输入,其名称是我刚刚提取的 public static void Run([BlobTrigger("output/{name}", Connection = "AzureWebJobsStorage")]Stream myBlob, string name, TraceWriter log) using (var sr

我在azure blob中有一个json,我需要对其进行反序列化并从中获取字符串。字符串是blob的名称。然后,我需要将这个blob复制到一个存储容器中,这个blob是这个函数的输入,其名称是我刚刚提取的

public static void Run([BlobTrigger("output/{name}", Connection = "AzureWebJobsStorage")]Stream myBlob, string name, TraceWriter log)
using (var sr = new StreamReader(myBlob))
using (var jsonTextReader = new JsonTextReader(sr))
{
    var transcript = (someobject)serializer.Deserialize(jsonTextReader, typeof(Transcript));
    string blobname = (someobject.Results[0].FileName).Substring(0, name.LastIndexOf('.'));

上面是我当前函数的定义,以及我用来从json中提取文件名的方法。这可能与blob输入和输出绑定有关吗?如果是,是否有方法动态分配输出blob的名称?

如果配置
CloudBlockBlob
输出绑定,
容器和
名称属性将是只读的,由
[blob]
绑定属性定义。但是,有一种称为“命令绑定”的方法可以让您将绑定延迟到运行时,甚至可以演示如何写入任意blob容器和文件名:

使用Microsoft.Azure.WebJobs;
使用Microsoft.Azure.WebJobs.Host.Bindings.Runtime;
公共静态异步任务运行(字符串输入、绑定器)
{
使用(var writer=await binder.BindAsync(新的blobatAttribute(“示例输出/路径”))
{
写(“你好,世界!!”);
}
}
对于预编译的应用程序,我个人认为“老式方式”更容易阅读,但我认为这是一个偏好问题

CloudStorageAccount storage = CloudStorageAccount.Parse(conn_str);
CloudBlobClient blobClient = storage.CreateCloudBlobClient();
CloudBlobContainer blobContainer = blobClient.GetContainerReference(container);
CloudBlockBlob blob =blobContainer.GetBlockBlobReference(filename);
// etc.

您可以使用命令绑定来写入输出blob,这与以下内容一致:

公共静态无效运行(
[BlobTrigger(“input/{name}”,Connection=“azurewebjobstorage”)]字符串myBlob,
字符串名,
活页夹(活页夹)
{
var someobject=serializer.Deserialize(myBlob);
字符串blobname=(someobject.Results[0].FileName).Substring(0,name.LastIndexOf('.');
使用(var writer=binder.Bind)(
新的BlobAttribute($“输出/{blobname}”))
{
writer.Write(myBlob);
}
}

我对您的函数做了一些修改,以使我的示例更易于阅读。

我遇到的问题是Blob被空上传到目标blob@DarthVeder你还在使用流吗?如果是这样,您可能会错误地复制流。是的,我正在使用流。@在复制到输出之前,不要忘记将输入流重置为位置0。或重构为字符串:)当我尝试将流重置为0时,一直出现此错误:对象引用未设置为对象的实例