我正在尝试使用以下代码从互联网下载zip文件:
public void getFile(String updateURL) throws Exception {
URL url = new URL(updateURL);
HttpURLConnection httpsConn = (HttpURLConnection) url.openConnection();
httpsConn.setRequestMethod("GET");
TrustModifier.relaxHostChecking(httpsConn);
int responseCode = httpsConn.getResponseCode();
if (responseCode == HttpsURLConnection.HTTP_OK) {
String fileName = "fileFromNet";
try (FileOutputStream outputStream = new FileOutputStream(fileName)) {
ReadableByteChannel rbc = Channels.newChannel(httpsConn.getInputStream());
outputStream.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
}
}
httpsConn.disconnect();
}
TrustModifier是一个用于解决“信任问题”的类:http://www.obsidianscheduler.com/blog/ignoring-self-signed-certificates-in-java/
上面的代码适用于通过普通http或通过https公开的非压缩文件提供的zip文件但是如果我尝试下载通过https端点公开的zip文件,则只会下载一小段原始文件。我已经测试了来自互联网的不同下载链接,并且总是得到相同的结果。
有人知道我在这里做错了什么吗?
谢谢。
答案 0 :(得分:0)
transferFrom()
,直到传输完成,在这种情况下,您可以知道的唯一方法是将transferFrom()
的返回值相加,直到它们等于Content- HTTP响应的长度。
答案 1 :(得分:-2)
实际上问题出在我用来关闭服务器证书检查的TrustModifier类中。一旦我删除它,因为我不再需要它(我从服务器获取证书并将其放在本地信任存储区),我的问题解决了。