1.問題:
在本地預覽時,任何問題都沒有。但是程序部署到線上后,除了圖片可以正常預覽,其他的文件,例如:doc\docx\xls\xlsx\pdf等這些類型的時候,直接提示連接url異常。
2.現象分析及思考
但是文件的url是可以下載的,我把傳給預覽接口的參數,就是文件的鏈接,直接拿到瀏覽器訪問是可以正常下載的,但是為什么只有圖片可以預覽,其他文件卻不行?
經過我的檢查,所有文件都是在線上存在同一個ftp文件夾里的,所以應該是線上環境限制了可以讀取的文件類型,但是我找了半天,並沒有找到在什么地方有這么個限制的配置。
我想看看這個錯是怎么報出來的,是哪一行代碼出了問題。我根據提示的關鍵字,先把kkFileView這個項目下載到了本地(版本: 2.2.1),然后全局查找關鍵字【連接url異常】,終於找到了。
就是這個DownloadUtils中的getInputStreamFromUrl方法報出來的,如下:
private InputStream getInputStreamFromUrl(String urlStr) { try { URL url = new URL(urlStr); URLConnection connection = url.openConnection(); if (connection instanceof HttpURLConnection) { connection.setRequestProperty("Accept", "*/*"); connection.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)"); } return connection.getInputStream(); } catch (IOException e) { logger.warn("連接url異常:url:{}", urlStr); return null; } }
我想看看網上其他人有沒有碰到類似問題,一位名叫僅此_而已丶的兄弟於2019-02-18 15:19:37發布的帖子,引起了我注意:
關於Server returned HTTP response code: 403 for URL
3.解決
我根據他的修改方式,把代碼中的setRequesetProperty進行了更改,上面的方法變成了下面這樣:
private InputStream getInputStreamFromUrl(String urlStr) { try { URL url = new URL(urlStr); URLConnection connection = url.openConnection(); if (connection instanceof HttpURLConnection) { connection.setRequestProperty("Accept", "*/*"); connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36)"); } return connection.getInputStream(); } catch (IOException e) { logger.warn("連接url異常:url:{}", urlStr); return null; } }
然后問題就解決了,office文件也可以正常預覽了。
哈哈。
最后,十分感謝這位兄弟的帖子。