【问题标题】:Get picture from HttpClient从 HttpClient 获取图片
【发布时间】:2017-09-21 09:48:44
【问题描述】:

我需要帮助从 Web 服务中检索图片。这是一个 GET 请求。

目前我正在检索响应,并且能够将其转换为字节数组,这正是我想要的,但是字节数组会使应用程序崩溃,所以我认为内容设置不正确.

我已尝试将响应内容设置为:

response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = filename };     

即使我的猜测是设置错误,或者它在 requestHeader 中设置错误。

有什么想法吗?

using (var client = new HttpClient())
{
    client.BaseAddress = new Uri(baseurl.uri);
    client.DefaultRequestHeaders.Add("x-access-token", sessionToken);
    client.DefaultRequestHeaders
          .Accept
          .Add(new MediaTypeWithQualityHeaderValue("image/jpeg")
            );

    HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "");
    try
    {
        Task<HttpResponseMessage> getResponse = client.SendAsync(request);
        HttpResponseMessage response = new HttpResponseMessage();
        response = await getResponse;           
         //1. response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = filename };
        //2. response.Content.Headers.ContentType =

       //new MediaTypeHeaderValue("image/jpeg");//("application/octet-stream");


        byte[] mybytearray = null;
        if (response.IsSuccessStatusCode)
        {
        //3.
            mybytearray = response.Content.ReadAsByteArrayAsync().Result;
        }

        var responseJsonString = await response.Content.ReadAsStringAsync();
        System.Diagnostics.Debug.WriteLine(responseJsonString);
        System.Diagnostics.Debug.WriteLine("GetReportImage ReponseCode: " + response.StatusCode);
        return mybytearray;//{byte[5893197]}
    }
    catch (Exception ex)
    {
        string message = ex.Message;
        return null;
    }
}

【问题讨论】:

  • 哪一行抛出异常?
  • response.Content.Headers.ContentDisposition服务器 可以设置的标头,而不是客户端。事后试图在下载的响应对象中设置它是荒谬的。您的客户端已经处理了响应并观察了服务器发送的标头。现在设置另一个标题是没有意义的。
  • ADyson 你说得对,我可能不应该纠正这样的反应。我可以看到 reponse.Content.Headers 是: {Content-Type: text/plain Content-disposition: attachment;文件名="hello2.jpg"}

标签: c# asp.net-web-api httpclient


【解决方案1】:

您可以将图像的有效字节数组作为HttpContent的一部分发送

 HttpContent contentPost = new 
    StringContent(JsonConvert.SerializeObject(YourByteArray), Encoding.UTF8,
    "application/json");

反序列化结果后,您可以检索保存为 jpeg 或任何其他格式的字节数组。

byte[] imageByteArray = byteArray;

using(Image image = Image.FromStream(new MemoryStream(imageByteArray)))
{
    image.Save("NewImage.jpg", ImageFormat.Jpeg); 
}

【讨论】:

  • 当我将字节数组转换为图像时仍然有问题。所以我试图找出是否有另一种方法来验证我收到什么发送
  • 字节数组必须是图像的有效字节数组。您是否在 HttpContent 中发送有效的字节数组
  • 从 web api 反序列化你的结果后,你可以在response.Content.ReadAsStringAsync();下面运行一个
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-11
  • 2019-11-05
  • 2012-01-04
  • 1970-01-01
  • 2016-10-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多