最近公司里的域名都升級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);
當然或許還有其它更好的解決方案,我這只是比較簡單的