完成部分下载(HttpURLConnection .setRequestProperty(“ Range”,“ bytes =” + length +“-”);)

时间:2018-10-14 15:39:21

标签: java android download resume-download

我正在尝试下载几个文件。就我而言,服务器不返回连接长度。因此,我无法检查天气文件是否已完全下载。

如果下载不完整,我正在使用以下代码下载文件的其余部分。

long length = 0;
    if(file.exists()) length = file.length();
    URL url = null;
    try {
        url = new URL(urlString);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        FileOutputStream out;
        if(length==0)
            out = new FileOutputStream(file.getPath());
        else {
            connection.setRequestProperty("Range", "bytes="+length+"-");
            out = new FileOutputStream(file.getPath(),true);
        }
        connection.connect();
        BufferedInputStream in = new BufferedInputStream(connection.getInputStream());
        byte[] buf = new byte[1024];
        int n = in.read(buf);
        if(n!=-1 && !(new String(buf,"UTF-8")).startsWith("<"))
            do out.write(buf, 0, n); while (-1 != (n = in.read(buf)));
        out.close(); in.close();
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

正在发生的事情是,完整的文件将再次下载并附加到先前下载的文件中。

connection.setRequestProperty(“ Range”,“ bytes =” + length +“-”);似乎不起作用。

谁能建议一种更好的方法来完成部分下载的文件的下载。

0 个答案:

没有答案