Как просматривать изображения локальной сети с удаленного интерфейса при использовании? - PullRequest
1 голос
/ 14 декабря 2011

У меня есть следующие настройки сети:

         ___________> [Remote IP] * can access anything from 192.168.1.2.
        |                         * it has a public static ip to access as 8x.8x.2xx.1x
        |
        ^
      [WAN]
        |
     [Router]
        |
        |---[LAN]
        |
   [HTTP WEB SERVER]@192.168.1.2
        |
        |
  --------------------------------------------------- (LAN)
    |             |               |
  [PC1]         [PC2]           [PC3]
  |             |               |
  192.168.1.3   192.168.1.4     192.168.1.5

Пример дела:

[OK]: ПК1, ПК2 имеет доступное изображение в форме 192.168.1.3:7007/picture1.jpeg и 192.168.1.4:7007/picture1.jpeg

[OK]: ПК3, если я открою сайт с 192.168.1.2, я смогу увидеть картинку1 и картинку2. Как мой HTML-код:

<img src="http://192.168.1.3:7007/picture1.jpeg?1323809545000?1323809546000?1323809547000" class="monitor_realtime" />

<img src="http://192.168.1.4:7007/picture1.jpeg?1323809545000?1323809546000?1323809547000" class="monitor_realtime" />

[НЕ ОК]: Но если я теперь удаленно из общедоступного места открываю страницу, я не могу видеть изображения.

Как я могу видеть картинки, когда открываю их удаленно (работает локальный просмотр)?

Ответы [ 3 ]

2 голосов
/ 14 декабря 2011

Вы говорите, что на ПК1 и ПК2 также есть веб-сервер, работающий на порту 7007?Если это так, предположительно, маршрутизатор не пересылает запросы этим веб-серверам.Если вы планируете получать доступ к содержимому, размещенному в локальной сети, маршрутизатор должен знать, чтобы перенаправить эти запросы на соответствующий сервер.

РЕДАКТИРОВАТЬ : на основе контекста, указанного в вашем комментарии к ответу m4tt1mus, вам нужно пойти со вторым вариантом.Вы можете настроить маршрутизатор так, чтобы он перенаправлял порт 81 на порт 7007 ПК1 и порт 82 на порт 7007 ПК2.

2 голосов
/ 14 декабря 2011

Контекст 192.168.1.4 отличается в зависимости от того, подключены ли вы к локальной сети веб-сервера или к удаленному компьютеру. Удаленный компьютер будет искать эту картинку в собственной сети (а не в вашей). Вам нужно использовать общедоступный IP-адрес или какой-либо другой удаленно доступный адрес, чтобы изображения работали. Или вы можете использовать какой-то странный сервис, который извлекает их из локальной сети и кэширует их на веб-сервере или что-то.

0 голосов
/ 18 мая 2016

У меня была похожая проблема, но я не смог изменить конфигурацию маршрутизатора. Поэтому я придумал альтернативное решение для таких случаев. Вместо того, чтобы устанавливать маршрут из одной сети в другую, я изменил способ подачи изображений без изменения их местоположения. Мое решение описано здесь . Фрагменты кода для моего стека (Asp.NET/Nancy/Razor), но идея не зависит от технологии. Короче говоря, вы можете конвертировать изображения «на лету» в строку base64 и обслуживать их, встроенные в вашу страницу, с вашего публичного сервера. Это прекрасно работает для меня с помощью следующего кода (C #):

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 (Base64Image):

<img id="photo" src="@Model.Base64Image" title="@Model.Description" /> 
...