【问题标题】:Loading image from remote server in different LAN从不同局域网中的远程服务器加载图像
【发布时间】:2016-09-14 13:27:26
【问题描述】:
我的堆栈是带有 Razor 视图引擎的 ASP.NET (Nancy)。但这可能涉及我认为的所有技术。
我有两个 LAN 网络(我们称它们为大型网络和小型网络)和两台服务器(又名主服务器和图像服务器)。两个网络中的计算机都可以访问主服务器,但图像服务器仅对小型网络中的计算机可见。我有一个由主服务器提供的网站,它显示来自远程(图像)服务器的图像:
<img src="http://ImageServer/image.png"/>
当来自小型网络的计算机从主服务器加载网页时,一切都很好,因为它也可以访问图像服务器(同一网络)。大型网络中的计算机加载网页时会出现问题。图像未加载,因为图像服务器位于大型 LAN 中的计算机无法访问的小型网络中。
有什么办法可以强制主服务器直接提供图片吗?
【问题讨论】:
标签:
asp.net
networking
razor
nancy
【解决方案1】:
我不知道为什么在发布我的问题之前找不到this。最简单的方法似乎是正确的路由器配置。但是......在我的情况下,更改路由器配置是不可能的。知道了所有这些,我终于开始了自己的大脑;)。
我的解决方案是首先使用以下 C# sn-p 将图像转换为 base64 字符串:
private string convertToBase64(string imageURL)
{
var request = WebRequest.Create(imageURL);
using (var response = request.GetResponse())
{
using (var stream = response.GetResponseStream())
{
using (Image image = Image.FromStream(stream))
{
using (MemoryStream m = new MemoryStream())
{
image.Save(m, image.RawFormat);
byte[] imageBytes = m.ToArray();
string base64String = Convert.ToBase64String(imageBytes);
return string.Format("data:image/png;base64,{0}", base64String);
}
}
}
}
}
这一切都发生在服务器端,因此访问图像没有问题。
然后我通过 Model 属性将字符串传递给 View 并按如下方式显示图像:
<img id="photo" src="@Model.Base64Image" title="@Model.Description" />
这个解决方案可能有缺陷,但它对我有用,而且我找不到在这种情况下可以使用的其他任何东西。