所以我试图这样做:
现在,我有1和2正常工作。但现在,我不知道如何将该image / jpeg字符串转换为Azure存储中的Blob。我已经尝试了很多,研究了很多,但它真的很难。
我试图使用
blob.Properties.ContentType = "image/jpeg"
blob.UploadText(imgString);
但它没有用。
所以我的代码看起来像这样:
我从GraphApi获取图像数据的方式是使用RestSharp,如下所示:
var client = new RestClient("https://graph.microsoft.com/v1.0/users/" + email + "/photo/$value");
var request = new RestRequest(Method.GET);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("authorization", "Bearer " + token);
request.AddHeader("content-type", "image/jpeg");
return client.Execute(request);
所以我返回一个IRestResponse,它包含这样的内容:
response.ContentType //to get the content type
response.Content // to get the body (the image)
blob.UploadText(response.Content);
这就是我尝试做的事情,但它不起作用,文件保存正常但是当你打开文件时,你却无法真正看到图像。我认为问题可能是某些编码,我尝试过设置不同的编码类型而没有运气。
看看下一张照片。在右边,我使用PHP从Graph Api获取图像,并将标题设置为image / jpeg,然后回显图像数据。有用。在左边,它是使用javascript或c#的Azure功能,我得到图像,当我尝试做同样的事情(在浏览器中显示)时,我得到一个不同的二进制字符串,页面上没有图片(如果它不是图像数据),所以看起来好像问题是编码。我使用UploadText将这个二进制数据保存在blob文件中,但它无效。
有什么想法吗?
答案 0 :(得分:0)
有什么想法吗?
请使用 RawBytes 作为blob内容。它在我身边正常工作。
blob.UploadFromByteArray(response.RawBytes,0,response.RawBytes.Length-1);
以下是我的测试演示代码
var connectionString = "storage connection string";
CloudStorageAccount storageAccount =
CloudStorageAccount.Parse(connectionString);
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container =
blobClient.GetContainerReference("container");
container.CreateIfNotExists();
CloudBlockBlob blob = container.GetBlockBlobReference("test.jpeg");
blob.UploadFromByteArray(response.RawBytes,0,response.RawBytes.Length-1);