美文网首页
Android文件下载前获取多个网络文件总大小

Android文件下载前获取多个网络文件总大小

作者: 小六六丶 | 来源:发表于2020-04-21 11:04 被阅读0次

文件下载是开发中比较常见的功能,当后端无法告诉前端下载文件大小时,就需要前端自己获取文件大小

简单的方法为:

final URLConnection connection = url.openConnection();
final int length = connection.getContentLength();

当文件比较多且文件较大时,使用getContentLength()获取大小你会发现,神马情况?太NM慢了

记录一下解决文件下载前获取多个网络文件总大小时太慢的问题

    private long getAllFileLength(String[] fileList){
        try {
            URL u = null;
            long fileLength = 0;
            for (int i=0;i<fileList.length;i++){
                u = new URL(fileList[i]);
                HttpURLConnection urlcon = (HttpURLConnection) u.openConnection();
                 fileLength =  fileLength + handleFileLen(urlcon.getHeaderFields());
            }
            return fileLength;
        } catch (MalformedURLException e) {
            e.printStackTrace();
            return 0;
        } catch (IOException e) {
            e.printStackTrace();
            return 0;
        }
    }
public long handleFileLen(Map<String, List<String>> headers) {
        if (headers == null || headers.isEmpty()) {
            Log.e(TAG, "header为空,获取文件长度失败");
            return -1;
        }
        List<String> sLength = headers.get("Content-Length");
        if (sLength == null || sLength.isEmpty()) {
            return -1;
        }
        String temp = sLength.get(0);
        long len = TextUtils.isEmpty(temp) ? -1 : Long.parseLong(temp);
        // 某些服务,如果设置了conn.setRequestProperty("Range", "bytes=" + 0 + "-");
        // 会返回 Content-Range: bytes 0-225427911/225427913
        if (len < 0) {
            List<String> sRange = headers.get("Content-Range");
            if (sRange == null || sRange.isEmpty()) {
                len = -1;
            } else {
                int start = temp.indexOf("/");
                len = Long.parseLong(temp.substring(start + 1));
            }
        }

        return len;
    }

相关文章

  • Android文件下载前获取多个网络文件总大小

    文件下载是开发中比较常见的功能,当后端无法告诉前端下载文件大小时,就需要前端自己获取文件大小 简单的方法为: 当文...

  • 5.31~6.3在线下载服务器文件,应用及通知栏显示进度和断点多

    获取网络文件大小关于inputStream.available()方法获取下载文件的总大小inputStream....

  • iOS下载注意点

    1、获取总文件大小用HEAD请求方式,减少响应数据,只获取文件本身属性 2、单文件下载,一组文件下载,多组任务下载...

  • IOS常用方法

    1.获取磁盘总空间大小 2.获取磁盘可用空间大小 3.获取指定路径下某个文件的大小 4.获取文件夹下所有文件的大小...

  • 多线程断点下载

    断点下载思路: 1.首先获取网络文件的长度,在本地创建一个相同大小的文件 2.创建N个线程,将网络文件平均分为N份...

  • IOS一些常用方法

    1.** 获取磁盘总空间大小** 2. 获取磁盘可用空间大小 3. 获取指定路径下某个文件的大小 4. 获取文件夹...

  • iOS 常用公共方法

    1. 获取磁盘总空间大小 2. 获取磁盘可用空间大小 3. 获取指定路径下某个文件的大小 4. 获取文件夹下所有文...

  • iOS常用公共方法

    1. 获取磁盘总空间大小 2. 获取磁盘可用空间大小 3. 获取指定路径下某个文件的大小 4. 获取文件夹下所有文...

  • iOS常用公共方法

    1. 获取磁盘总空间大小 2. 获取磁盘可用空间大小 3. 获取指定路径下某个文件的大小 4. 获取文件夹下所有文...

  • 转载-iOS 常用公共方法,看着很好,收藏下。

    1. 获取磁盘总空间大小 2. 获取磁盘可用空间大小 3. 获取指定路径下某个文件的大小 4. 获取文件夹下所有文...

网友评论

      本文标题:Android文件下载前获取多个网络文件总大小

      本文链接:https://www.haomeiwen.com/subject/qpoyihtx.html