Php 使用<;时如何从远程界面查看本地网络的图像;img src=”等&引用/>;?
我有以下网络设置:Php 使用<;时如何从远程界面查看本地网络的图像;img src=”等&引用/>;?,php,html,networking,browser,Php,Html,Networking,Browser,我有以下网络设置: ___________> [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] | |
___________> [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
案例示例:
[确定]:PC1、PC2的图像格式为192.168.1.3:7007/picture1.jpeg和192.168.1.4:7007/picture1.jpeg
[确定]:PC3如果我从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" />
[不正常]:但是如果我现在从公共位置远程打开页面,我就看不到图片
当我远程打开它时,如何才能看到图片(本地浏览工作)?192.168.1.4的上下文因您是在Web服务器(本地)网络还是远程计算机上而不同。远程计算机将在其自己的网络(而不是您的网络)上查找该图像您需要使用公共IP地址或其他远程公开的地址才能使图片正常工作。或者您可以使用某种奇怪的服务,将图片从本地网络中提取出来,并将其缓存到web服务器或其他什么东西上 您是说PC1和PC2都有一个运行在端口7007上的Web服务器吗?如果是这样,路由器大概不会将请求转发给这些Web服务器。如果您计划访问局域网上承载的内容,那么路由器必须知道如何将这些请求转发到相关服务器
编辑:根据您对m4tt1mus答案的评论中提供的上下文,您需要选择第二个选项。您可以将路由器设置为将端口81转发到PC1的端口7007,将端口82转发到PC2的端口7007。我遇到类似问题,但无法更改路由器配置。所以我为这种情况想出了另一种解决办法。我没有设置从一个网络到另一个网络的路由,而是在不改变位置的情况下改变了图像的服务方式。描述了我的解决方案。 这些代码片段是针对我的堆栈(Asp.NET/Nancy/Razor)的,但其思想与技术无关。 简而言之,您可以将图像“动态”转换为base64字符串,并从公共服务器提供嵌入页面中的图像。它使用以下代码(C#)非常适合我: 然后将转换后的图像作为@Model属性之一(Base64Image)传递给视图:
首先,如何远程打开网站?你没有公共地址或动态主机名吗?您的
引用在html页面源代码中是什么样子的?我认为他的web服务器已经公开,但计算机没有。他正在使用本地ip地址加载图像。至少我是这样读的。继续搜索类似的主题。(先搜索!但如果你想把你的问题移到那个里,并可能在那个里得到回答,那么就标记你的问题以引起主持人的注意。)PC1、PC2、PC3、服务器都有自己的:7007/picture1.jpeg。目的是远程查看所有图片。(它总是在本地工作)。要么您需要在服务器上托管所有内容,要么您需要将路由器设置为将请求转发到LAN上的每个不同服务器。您可能会通过为每台服务器使用不同的端口来实现这一点。请记住,您仍然需要使用URL的外部地址,以便可以在外部查看它们,这可能会停止其内部工作(由于环回问题)。+1并勾选答案。你解释的好处是不改变嵌入式设备端口,因为在那里我不能做任何事情。另一方面,它解决了我的问题,因为在路由器中,我实际上可以做端口映射。非常感谢。这个奇怪的服务可能是Apache和mod_proxy;将筛选的请求从公开可用的Web服务器转发到两个内部映像服务器。显然,监听不同的端口,或利用可识别的图像路径,以及
而不是硬编码的内部IP URL。这不是HTML或浏览器错误吗?他们在
中错过了它?PC1,PC2是我的IPCAmeras,它每3秒发送一次实时预览。(它们是嵌入式设备,我无法修改端口,就像注入一样固定)。@Google不,这不是HTML或img标记中的错误。它的设计从未允许您查看无法访问的内容。虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能无效。-@谢谢你的课。我根据你的建议更正了我的答案。
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" />