该文章用于备忘。
背景描述
- java从网络链接下载文件
- 容器weblogic 10.3.6
- 后台跑
问题描述
- 下载网络文件时,出现非200情况
- 返回码 206
- 返回信息 Partial Content
备忘
- 206属于同200一样的返回码
- 不同点在于,200是一次性返回结果;206是返回了一部分字节
- 通常返回206 Partial Content的服务器,可认为是支持断电续传的
- 打开链接后,需要设置range
HttpURLConnection connection = null;
URL url = new URL(urlStr);
connection = (HttpURLConnection)url.openConnection();
// 已经下载的字节数
long alreadySize = 0;
File file = new File(downloadPath);
if (file.exists()) {
// 如果文件存在,就获取当前文件的大小
alreadySize = file.length();
}
connection.setRequestProperty("Range", "bytes=" + alreadySize + "-");
connection.connect();
int responseCode = connection.getResponseCode();
String responseMessage = connection.getResponseMessage();
如果返回码为206,则
if(responseCode == 206) {
// 获取未下载的文件的大小
// 本方法用来获取响应正文的大小,但因为设置了range请求头,那么这个方法返回的就是剩余的大小
long unfinishedSize = connection.getContentLength();
// 文件的大小
long size = alreadySize + unfinishedSize;
// 获取输入流
InputStream in = connection.getInputStream();
// 获取输出对象,参数一:目标文件,参数2表示在原来的文件中追加
OutputStream out = new BufferedOutputStream(new FileOutputStream(file, true));
// 开始下载
byte[] buff = new byte[4096];
int len;
logger.error(downloadPath + " 下载开始");
while ((len = in.read(buff)) != -1) {
out.write(buff, 0, len);
alreadySize += len;
}
out.close();
logger.error(downloadPath + " 下载结束");
return true;
}