将Azure Blob流反序列化为Json对象
问题描述:
我正尝试使用azure blob触发器将blob流反序列化为JSON对象。每当我将视频上传到Blob存储时,都会触发此触发器。但是,它是引发此错误:将Azure Blob流反序列化为Json对象
Newtonsoft.Json: Unexpected character encountered while parsing value: . Path ''.
这是我使用的反序列化的代码:
public static void Run(Stream myBlob, string name, TraceWriter log)
{
myBlob.Position = 0; //resetting stream's position to 0
var serializer = new JsonSerializer();
using(var sr = new StreamReader(myBlob))
{
using(var jsonTextReader = new JsonTextReader(sr))
{
BlobData blobData = serializer.Deserialize<BlobData>(jsonTextReader);
}
}
public class BlobData
{
public string path { get; set; }
}
}
任何帮助将是appreciated.Thanks。
答
A i mentioned earlier, the blob will contain a video and after upload a trigger will fire. As of now, i am using some sample videos
由于Gaurav Mantri评论说你无法将视频反序列化为JSON对象。根据我的理解,如果您想在上传视频blob后检索blob Uri,并将视频Blob网址存储到某个其他数据存储区。在这一点上,你可以绑定CloudBlockBlob
类型,请myBlob
参数,可以按如下方式检索BLOB网址:
run.csx
#r "Microsoft.WindowsAzure.Storage"
using Microsoft.WindowsAzure.Storage.Blob;
public static void Run(CloudBlockBlob myBlob, string name, TraceWriter log)
{
//blob has public read access permission
var blobData = new BlobData() { path = myBlob.Uri.ToString() };
//blob is private, generate a SAS token for this blob with the limited permission(s)
var blobSasToken=myBlob.GetSharedAccessSignature(new SharedAccessBlobPolicy()
{
SharedAccessExpiryTime =DateTimeOffset.UtcNow.AddDays(2),
Permissions = SharedAccessBlobPermissions.Read
}));
var blobData = new BlobData()
{
path = $"{myBlob.Uri.ToString()}{blobSasToken}"
};
//TODO:
}
此外,你可以遵循Create and use a SAS with Blob storage, Azure Functions Blob storage bindings,Get started with Azure Blob storage using .NET了解更多详细代码示例。
你可以编辑你的问题,并包括blob的实际内容? –
我之前提到过,blob将包含一个视频,上传后会触发一个触发器。截至目前,我正在使用一些示例视频。 – Vin
当blob是一个视频,它如何被反序列化为一个JSON对象? –