最近公司里的域名都升级https包括图片域名,之后就陆续出现了一些问题,其中包括无法在java代码中用HttpURLConnection访问图片路径后获取输入流:InputStream(即使获取到了,InputStream里面的值都是无效的)。
百度查找后换了几种方法试了都不行,最后我就在想是不是跟https访问有关,之后我就把图片域名设置成即可以用http访问也可以用https访问,然后再用HttpURLConnection来访问图片路径,访问时图片路径用的是http,运行代码之后果然可以获取到图片的输入流了,然后我又试了下把http改成https,再运行代码还是获取不了。
下面就是怎么设置即可以用https访问也可以用http访问:
1、首先在 nginx 配置文件中把 ssl on; 这一行注释掉或者删除了
# ssl on; 表示开启https,开启了之后只允许https访问,不允许http访问
2、重启 nginx 即可使用http和https访问了
具体用 HttpURLConnection 访问的代码如下:
URL url = new URL("http://img.alicdn.com/simba/img/TB1l_ulPpXXXXc8XVXXSutbFXXX.jpg"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setConnectTimeout(15000); connection.setReadTimeout(15000); connection.connect(); //访问图片 DataInputStream dis = new DataInputStream(connection.getInputStream()); Image firstImg = ImageIO.read(dis);//将图片 //获取图片的长和高 Integer firstImgWidth = firstImg.getWidth(null); Integer firstImgHeight = firstImg.getHeight(null);
当然或许还有其它更好的解决方案,我这只是比较简单的