【发布时间】:2017-08-24 13:55:46
【问题描述】:
我有一个 ASP.NET 核心应用程序,需要向 Microsoft 认知服务发送流(流由客户端发布)以获取 ID。然后将相同的流发送到azure blob进行备份,文件名应该是从认知服务接收到的ID。
但在 faceServiceClient 使用后,MemoryStream ms 似乎已关闭:在第二个“ms.Position = 0”语句中出现错误,即“无法访问已关闭的流”。
public static async Task CreatPerson(string _key, HttpRequest _req)
{
var faceServiceClient = new FaceServiceClient(_key);
using (MemoryStream ms = new MemoryStream())
{
_req.Body.CopyTo(ms);
ms.Position = 0;
var facesTask = faceServiceClient.AddFaceToFaceListAsync("himlens", ms);
//init azure blob
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(AZURE_STORE_CONN_STR);
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference("xxx");
var faces = await facesTask;
var blob = container.GetBlockBlobReference(faces.PersistedFaceId.ToString());
ms.Position = 0;//Error Here
await blob.UploadFromStreamAsync(ms);
}
}
我对此感到困惑,有人可以帮我解决这个问题吗?
谢谢!
【问题讨论】:
-
AddFaceToFaceListAsync是否会关闭流?无论如何,如果您打算将流的数据传递给多个方法,请提取缓冲区并将其传递给方法,而不是尝试更改流的位置。最后,您不应该在任务中使用.Wait()或.Result。最后一行应该是await blob.UploadFromStreamAsync(ms);
标签: c# asp.net azure stream asp.net-core-webapi