C# 正在使用RestSharp将图像上载到WCF Api-图像无效

C# 正在使用RestSharp将图像上载到WCF Api-图像无效,c#,rest,azure,restsharp,C#,Rest,Azure,Restsharp,我已成功制作了一个应用程序,该应用程序将请求从我的Windows Phone发送到托管在azure web角色中的WCF api。我正在使用restfulpost方法来使用RestSharp实现这一点。这一切都非常出色,图像显示在存储器中,但图像并不像普通图像文件那样打开 将它们与我之前上传的其他图像进行比较,在元数据信息中,它说无法查看的图像有一个contentMD5字段,该字段设置为“AKEYWqGgulwi6/9/VY2KPg==”(而其他图像没有设置),这可能是导致文件出现问题的原因吗

我已成功制作了一个应用程序,该应用程序将请求从我的Windows Phone发送到托管在azure web角色中的WCF api。我正在使用restfulpost方法来使用RestSharp实现这一点。这一切都非常出色,图像显示在存储器中,但图像并不像普通图像文件那样打开

将它们与我之前上传的其他图像进行比较,在元数据信息中,它说无法查看的图像有一个contentMD5字段,该字段设置为“AKEYWqGgulwi6/9/VY2KPg==”(而其他图像没有设置),这可能是导致文件出现问题的原因吗

我已经附加了我的RestSharp代码,也许我正在添加一些我不应该添加的东西?我怀疑错误一定来自这里,因为这是唯一一个操作imagestream的地方

   public void SendRequest(Stream imageStream, string imageID)
    {
        var client = new RestClient();
        client.BaseUrl = apiAddress;
        var request = new RestRequest("agerecog/{imageName}", Method.POST);
        request.AddUrlSegment("imageName", imageID);

        //convert imagestream to byte array
        var byteArray = new byte[imageStream.Length];
        imageStream.Read(byteArray, 0, (int)imageStream.Length);

        //add byteArray to request
        request.AddFile("image/jpeg", byteArray, imageID);
        var url = client.BuildUri(request).ToString();
        client.ExecuteAsync<VizageResponse>(request, response =>
            {
                //request info. to be added here
            });
    }
这更改了流长度,并使contentMD5字段为空。但是,该图像仍然不是有效的图像文件。考虑到我正在比较的图像都来自Windows Phone emulator,它们都应该是一个相同的白色页面,在角落里有一个小的黑色正方形-但是文件之间的大小不同(有效图像文件的长度为5670,原始代码的长度为6076,使用上面的第二个addFile的长度为6239)

编辑#2 再做一些分析,当发送图像流之前,它的长度属性是6116,当它到达服务器时,它的长度属性是6370。264是从我相信的RestSharp方法中的某个地方添加的,或者是在服务器端解释数据流时添加的。WCF服务的代码:

  [WebInvoke(UriTemplate = "/agerecog/{imageName}", Method = "POST")]
    VizageResult analyseFace(string imageName, Stream imageStream);

我不太熟悉。你能确定MD5是正确的吗?尝试将blob中的数据与原始图像文件中的数据进行比较。检查,例如,它们是否具有相同的大小,第一个/最后几个字节是否相同(并且假设中间的字节也是相同的)。< /P> < P> <强>问题解决< /强> < /P> 我终于解决了这个问题,最终的结果是一幅图像清晰可见。发生的情况是,imageStream还包含有关文件名的数据,这导致它(保存在Azure中时)不会显示为图像文件

我通过使用服务器端的MultipartParser类将请求解析为filename和filestream块解决了这个问题。然后,我使用正常过程从这个字节[]保存了图像

我将webrequest数据解析为其组成部分的代码如下所示:

    MemoryStream imageStream = new MemoryStream();

     MultipartParser parser = new MultipartParser(dataStream);
        if (parser != null && parser.Success)
        {
            imageName = parser.Filename;
            imageStream.Write(parser.FileContents, 0, parser.FileContents.Length);
        }

当您使用内存流时,请记住将其位置设置回0-我犯了一个小学生的错误

你能把这些要求和费德勒比较一下吗?您可能还希望直接写入流的AddFile重载。谢谢John,很遗憾,我不能使用fiddler,因为azure服务托管在我的本地开发环境中。不过,我已经做了一些调查工作,我将添加到上面的编辑中。我将直接写到流,也直接写到流似乎也不起作用,不幸的是,我认为它起作用了,但是我需要在另一端解析文件流,我目前没有这样做-这将解释流中的额外数据,我相信谢谢,我现在会尝试这样做。我在上面做了一个编辑。我将尝试做更多的事情来找出问题的原因,但是如果我在linux机器上有第三方web服务,我该怎么办?!我认为这仍然是restSahrp错误。有人知道如何在发送请求之前修复HTTP正文吗???抱歉没有回复-不幸的是,不知道
    MemoryStream imageStream = new MemoryStream();

     MultipartParser parser = new MultipartParser(dataStream);
        if (parser != null && parser.Success)
        {
            imageName = parser.Filename;
            imageStream.Write(parser.FileContents, 0, parser.FileContents.Length);
        }