从不同 LAN 中的远程服务器加载图像
Loading image from remote server in different LAN
我的堆栈是 ASP.NET (Nancy),使用 Razor 视图引擎。但这可能涉及我想的所有技术。
我有两个 LAN 网络(我们称它们为大型网络和小型网络)和两台服务器(a.k.a 主服务器和图像服务器)。来自两个网络的计算机都可以访问主服务器,但图像服务器仅对小型网络中的计算机可见。我的网站由主服务器提供服务,它显示来自远程(图像)服务器的图像:
<img src="http://ImageServer/image.png"/>
当来自小型网络的计算机从主服务器加载网页时一切正常,因为它也可以访问图像服务器(同一网络)。当来自大型网络的计算机加载网页时出现问题。图片未加载,因为图片服务器位于大型 LAN 中的计算机无法访问的小型网络中。
有没有办法强制主服务器直接提供图像?
我不知道为什么在发布我的问题之前找不到 this。最简单的方法似乎是适当的路由器配置。但是...在我的情况下无法更改路由器配置。知道了这一切,我终于启动了自己的大脑 ;)。
我的解决方案是先使用以下 C# 代码段将图像转换为 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);
}
}
}
}
}
这一切都发生在服务器端,因此访问图像没有问题。
然后我通过模型 属性 将字符串传递给视图并显示图像如下:
<img id="photo" src="@Model.Base64Image" title="@Model.Description" />
可能这个解决方案有它的缺陷,但它对我有用,而且我找不到我可以在这种情况下使用的任何其他东西。
我的堆栈是 ASP.NET (Nancy),使用 Razor 视图引擎。但这可能涉及我想的所有技术。
我有两个 LAN 网络(我们称它们为大型网络和小型网络)和两台服务器(a.k.a 主服务器和图像服务器)。来自两个网络的计算机都可以访问主服务器,但图像服务器仅对小型网络中的计算机可见。我的网站由主服务器提供服务,它显示来自远程(图像)服务器的图像:
<img src="http://ImageServer/image.png"/>
当来自小型网络的计算机从主服务器加载网页时一切正常,因为它也可以访问图像服务器(同一网络)。当来自大型网络的计算机加载网页时出现问题。图片未加载,因为图片服务器位于大型 LAN 中的计算机无法访问的小型网络中。
有没有办法强制主服务器直接提供图像?
我不知道为什么在发布我的问题之前找不到 this。最简单的方法似乎是适当的路由器配置。但是...在我的情况下无法更改路由器配置。知道了这一切,我终于启动了自己的大脑 ;)。 我的解决方案是先使用以下 C# 代码段将图像转换为 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);
}
}
}
}
}
这一切都发生在服务器端,因此访问图像没有问题。
然后我通过模型 属性 将字符串传递给视图并显示图像如下:
<img id="photo" src="@Model.Base64Image" title="@Model.Description" />
可能这个解决方案有它的缺陷,但它对我有用,而且我找不到我可以在这种情况下使用的任何其他东西。