1.问题:
在本地预览时,任何问题都没有。但是程序部署到线上后,除了图片可以正常预览,其他的文件,例如:docdocxxlsxlsxpdf等这些类型的时候,直接提示连接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文件也可以正常预览了。
哈哈。
最后,十分感谢这位兄弟的帖子。