【问题标题】: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" />
    

    这个解决方案可能有缺陷,但它对我有用,而且我找不到在这种情况下可以使用的其他任何东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多