如何显示WS返回的图像?

时间:2016-02-08 10:45:53

标签: c# asp.net-mvc-4

我请求一个返回图像的WS。

 HttpWebResponse response = (HttpWebResponse)request.GetResponse();

我可以看到HttpWebResponse中的contentType是image / jpeg。 我希望在我的视图中显示此图像,但我不知道如何。我不想将此图像写在硬盘上的具体文件中 我需要从HttpWebResponse中提取什么,是否必须将其转换为byte [],文件或其他内容? 如何在我的视图中显示<img>,我应该为src添加什么,因为文件不会真正存在?

<img src="???" />

编辑:这是我到目前为止所做的:

在控制器中:

 ...
byte[] responseByte = null;
 HttpWebResponse response = (HttpWebResponse)request.GetResponse();
 Stream dataStream = response.GetResponseStream();
 long streamLength = GetStreamLength(dataStream);
 responseByte = new byte[streamLength];
 dataStream.Read(responseByte, 0, (int)streamLength);
 productDTO.thumbnail = responseByte;

在视图中:

 @{
      var base64 = Convert.ToBase64String(@item.thumbnail);
      var imgSrc = String.Format("data:image/jpeg;base64,{0}", base64);
  }
  <img src="@imgSrc" />

但是我的图片链接断了,@ imgSrc只包含

<img src="data:image/jpeg;base64,AAAAAA.....AAAAAAAAAAA">

2 个答案:

答案 0 :(得分:1)

最后,这就是我所做的(这是上述答案的混合以及其他主题上发现的其他答案):

控制器:

...
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream dataStream = response.GetResponseStream();
wsResponseAsImg = Image.FromStream(response.GetResponseStream());

byte[] imgBytes = turnImageToByteArray(wsResponseAsImg);
string imgString = Convert.ToBase64String(imgBytes);
string responseImgToBase64 = String.Format("data:image/jpeg;base64," + imgString);
 productDTO.thumbnail = responseImgToBase64;

 ...
 }


    private byte[] turnImageToByteArray(System.Drawing.Image img)
    {
        MemoryStream ms = new MemoryStream();
        img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
        return ms.ToArray();
    }

查看:

...
<img src="@item.thumbnail" />
...

感谢您的帮助:)

答案 1 :(得分:0)

您可以在src中使用base64格式的图像。

看起来像这样:

    <img src="data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAUA
AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
    9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Red dot" />

你可以在这里看到这个:

http://jsfiddle.net/hpP45/1763/