android 下载文件HttpURLConnection.getContentLength()为0,不下载

本文介绍了一种解决在使用HttpURLConnection下载文件时遇到文件长度为0的问题的方法,并通过设置请求头Accept-Encoding来成功获取文件。

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

下载的时候,莫名奇妙的不能下载在本地。如图下边

HttpURLConnection conn = null;
			RandomAccessFile raf = null;
			try {
				URL url = new URL(mFileInfo.getUrl());
				conn = (HttpURLConnection) url.openConnection();
				conn.setConnectTimeout(5 * 1000);
				conn.setRequestMethod("GET");
				int code = conn.getResponseCode();
				int length = -1;
				if (code == HttpURLConnection.HTTP_OK) {
					length = conn.getContentLength();
				}
				if (length <= 0) {
					return;
				}
				File dir = new File(DownloadPath);
				if (!dir.exists()) {
					dir.mkdir();
				}
				File file = new File(dir, mFileInfo.getFileName());
				raf = new RandomAccessFile(file, "rwd");
				raf.setLength(length);
				mFileInfo.setLength(length);
				Message msg = Message.obtain();
				msg.obj = mFileInfo;
				msg.what = MSG_INIT;
				mHandler.sendMessage(msg);
			} catch (Exception e) {
				e.printStackTrace();
			} finally {
				if (conn != null) {
					conn.disconnect();
				}
				try {
					if (raf != null) {
						raf.close();
					}
				} catch (IOException e) {
					e.printStackTrace();
				}
			}

经过断点发现会走这步

if (length <= 0) {
	return;
}

此时length 是为0,为什么会为0呢?

	if (code == HttpURLConnection.HTTP_OK) {
		length = conn.getContentLength();
	 }

getContentLength()是没有获取到
然后添加一行
conn.setRequestProperty(“Accept-Encoding”, “identity”);

因为Accept-Encoding:HTTP请求头,标识客户端能够理解的内容编码方式,通常是一种压缩算法,如:gizp,deflate,compress,identity… 客户端向服务端发送该请求头,示意服务端如果需要编码只能用这些编码方式,当然也有可以不用。无论用还是不用,服务端需要在响应头中加入Content-Encoding,其中identity标识未使用编码

可以解决getContentLength()为0,没有下载的问题。

如有不对的欢迎评论

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值