如何将位图从ASP.NET传递到JavaScript并显示它?

如何将位图从ASP.NET传递到JavaScript并显示它?,javascript,c#,asp.net,signalr,Javascript,C#,Asp.net,Signalr,这是我的第一个ASP.NET应用程序,我无法将服务器端位图对象传递到JavaScript客户端。我正在使用信号器连接服务器和客户端 我尝试过几种方法,希望对有ASP.NET经验的人来说这很容易 这是我的服务器端C#: 在客户端,我想获取位图并显示它: hubproxy.client.updateImage = function (image) { var img = document.createElement("img"); im

这是我的第一个ASP.NET应用程序,我无法将服务器端位图对象传递到JavaScript客户端。我正在使用信号器连接服务器和客户端

我尝试过几种方法,希望对有ASP.NET经验的人来说这很容易

这是我的服务器端C#:

在客户端,我想获取位图并显示它:

        hubproxy.client.updateImage = function (image) {
            var img = document.createElement("img");
            img.src = image;
            document.body.appendChild(img);
        };
我必须将其转换为JSON对象吗?如果我这样做了,我如何将其恢复到客户端的图像


提前感谢您的帮助。

您可以将图像转换为字节数组:

public static byte[] ImageToByte(Image img)
{
   ImageConverter converter = new ImageConverter();
   return (byte[])converter.ConvertTo(img, typeof(byte[]));
}
然后将其enocde到base64,您可以使用base64作为html中的图像源:

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIA..." />


另一种方法是将该映像保存在服务器上,并仅返回指向服务器上路径的链接,您可以使用GUID之类的内容生成唯一名称,定期清理旧映像或在客户端断开连接后进行清理,等等。这样做的好处是在大型图像上的网络流量更小——只发送文件名可以节省约37%的流量。

谢谢,效果很好。如果图像文件仍然需要传输,如何节省网络流量?我认为,通过发送原始数据,我可以节省一些时间,因为不会产生将图像写入磁盘的成本。您不需要将其写入磁盘,您可以在内存中缓存它,并让控制器使用GUID作为标识符返回映像。使用信号器发布该GUID
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIA..." />