以下是我在办公室的本地工作区执行时运行绝对正常的代码:
URL url = new URL(getImageUrl());
InputStream inputStream = url.openStream();
BufferedImage originalImage = ImageIO.read(inputStream);
getImageUrl返回一个可在网络中访问的简单网址 - http://someurl.png
我正在阅读的资源是一个http url - 一个简单的get操作。
此图片可轻松加载到前端。但是,在尝试在springboot后端项目中连接它时,它失败了上面的代码。
我可以直接在办公室网络中访问此图像。
但是,当我在unix框中上传我的java jar并运行服务项目时,此代码会因连接超时异常或“无法从URL获取输入流”而失败。
不确定为什么它会在不同的环境中采取不同的行动 - 两者都在办公室网络中。
操作系统在这里很重要吗?当我从windows移动到unix操作系统以运行同一个项目时,是否需要使用一些编码?
我得到的例外是:
java.net.ConnectException: Connection timed out
at java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:1.8.0_71]
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) ~[na:1.8.0_71]
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) ~[na:1.8.0_71]
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) ~[na:1.8.0_71]
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_71]
at java.net.Socket.connect(Socket.java:589) ~[na:1.8.0_71]
at java.net.Socket.connect(Socket.java:538) ~[na:1.8.0_71]
at sun.net.NetworkClient.doConnect(NetworkClient.java:180) ~[na:1.8.0_71]
at sun.net.www.http.HttpClient.openServer(HttpClient.java:432) ~[na:1.8.0_71]
at sun.net.www.http.HttpClient.openServer(HttpClient.java:527) ~[na:1.8.0_71]
at sun.net.www.http.HttpClient.<init>(HttpClient.java:211) ~[na:1.8.0_71]
at sun.net.www.http.HttpClient.New(HttpClient.java:308) ~[na:1.8.0_71]
at sun.net.www.http.HttpClient.New(HttpClient.java:326) ~[na:1.8.0_71]
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1169) ~[na:1.8.0_71]
at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1105) ~[na:1.8.0_71]
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:999) ~[na:1.8.0_71]
at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:933) ~[na:1.8.0_71]
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1513) ~[na:1.8.0_71]
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1441) ~[na:1.8.0_71]
at java.net.URL.openStream(URL.java:1045) ~[na:1.8.0_71]
这可能也是一个防火墙问题但只是想确定我在使用ImageIO类的方式上做错了什么?
此外,这是网络/机器管理员/超级用户可以解决的问题吗?
答案 0 :(得分:1)
这两台机器都在办公室网络内的事实并不意味着两者都可以到达(例如不同的DNS或防火墙规则等)。
你应该检查你可以下载图像的方框,从终端(在linux盒子上)运行:
wget http://typeOffendingURL.png
并且您可能会得到相同的错误,因为这是主机配置错误,而不是Java。