OSS下载时,出现206

本文讲述了在Java中使用HttpURLConnection从网络下载文件时遇到206PartialContent返回码的情况,介绍了如何设置Range请求头以支持断点续传,包括获取已下载字节数、计算剩余大小并进行实际下载操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

该文章用于备忘。

背景描述

  • java从网络链接下载文件
  • 容器weblogic 10.3.6
  • 后台跑

问题描述

  • 下载网络文件时,出现非200情况
  • 返回码 206
  • 返回信息 Partial Content

备忘

  1. 206属于同200一样的返回码
  2. 不同点在于,200是一次性返回结果;206是返回了一部分字节
  3. 通常返回206 Partial Content的服务器,可认为是支持断电续传的
  4. 打开链接后,需要设置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;
            }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值